Created discrete sound emulation for galaxian

- Must be enabled in includes/galaxian.h: GALAXIAN_USE_DISCRETE = 1
- Changed all audio related AM_WRITE to AM_DEV_WRITE
- Moved discrete sound related pieces such as initialization into audio/galaxian.h
- Split some memory maps into sound related and not sound related parts.
You need a Core2 to really enjoy the sound.
This commit is contained in:
Couriersud 2009-08-09 01:48:32 +00:00
parent 8dcd4f9668
commit 7ed3463c85
5 changed files with 538 additions and 136 deletions

View File

@ -1,8 +1,11 @@
#include "driver.h"
#include "streams.h"
#include "sound/samples.h"
#include "includes/galaxian.h"
#if !GALAXIAN_USE_DISCRETE
#include "sound/samples.h"
#define VERBOSE 0
#define NEW_LFO 1
@ -104,7 +107,7 @@ static STREAM_UPDATE( tone_update )
}
}
WRITE8_HANDLER( galaxian_sound_w )
WRITE8_DEVICE_HANDLER( galaxian_sound_w )
{
data &= 0x01;
switch (offset & 7)
@ -112,36 +115,36 @@ WRITE8_HANDLER( galaxian_sound_w )
case 0: /* FS1 (controls 555 timer at 8R) */
case 1: /* FS2 (controls 555 timer at 8S) */
case 2: /* FS3 (controls 555 timer at 8T) */
galaxian_background_enable_w(space, offset, data);
galaxian_background_enable_w(device, offset, data);
break;
case 3: /* HIT */
galaxian_noise_enable_w(space, 0, data);
galaxian_noise_enable_w(device, 0, data);
break;
case 4: /* n/c */
break;
case 5: /* FIRE */
galaxian_shoot_enable_w(space, 0, data);
galaxian_shoot_enable_w(device, 0, data);
break;
case 6: /* VOL1 */
case 7: /* VOL2 */
galaxian_vol_w(space, offset & 1, data);
galaxian_vol_w(device, offset & 1, data);
break;
}
}
WRITE8_HANDLER( galaxian_pitch_w )
WRITE8_DEVICE_HANDLER( galaxian_pitch_w )
{
stream_update(tone_stream);
pitch = data;
}
WRITE8_HANDLER( galaxian_vol_w )
WRITE8_DEVICE_HANDLER( galaxian_vol_w )
{
stream_update(tone_stream);
@ -154,31 +157,29 @@ static TIMER_CALLBACK( noise_timer_cb )
{
if( !noise_enable && noisevolume > 0 )
{
const device_config *samples = devtag_get_device(machine, "samples");
const device_config *samples = devtag_get_device(machine, GAL_AUDIO);
noisevolume -= (noisevolume / 10) + 1;
sample_set_volume(samples, CHANNEL_NOISE,noisevolume / 100.0);
}
}
WRITE8_HANDLER( galaxian_noise_enable_w )
WRITE8_DEVICE_HANDLER( galaxian_noise_enable_w )
{
noise_enable = data & 1;
if( noise_enable )
{
const device_config *samples = devtag_get_device(space->machine, "samples");
noisevolume = 100;
sample_set_volume(samples, CHANNEL_NOISE,noisevolume / 100.0);
sample_set_volume(device, CHANNEL_NOISE,noisevolume / 100.0);
}
}
WRITE8_HANDLER( galaxian_shoot_enable_w )
WRITE8_DEVICE_HANDLER( galaxian_shoot_enable_w )
{
if( data & 1 && !(last_port2 & 1) )
{
const device_config *samples = devtag_get_device(space->machine, "samples");
sample_start_raw(samples, CHANNEL_SHOOT, shootwave, shoot_length, shoot_rate, 0);
sample_set_volume(samples, CHANNEL_SHOOT,SHOOT_VOLUME);
sample_start_raw(device, CHANNEL_SHOOT, shootwave, shoot_length, shoot_rate, 0);
sample_set_volume(device, CHANNEL_SHOOT,SHOOT_VOLUME);
}
last_port2=data;
}
@ -415,10 +416,9 @@ static SAMPLES_START( galaxian_sh_start )
WRITE8_HANDLER( galaxian_background_enable_w )
WRITE8_DEVICE_HANDLER( galaxian_background_enable_w )
{
const device_config *samples = devtag_get_device(space->machine, "samples");
sample_set_volume(samples, CHANNEL_LFO+offset,(data & 1) ? LFO_VOLUME : 0);
sample_set_volume(device, CHANNEL_LFO+offset,(data & 1) ? LFO_VOLUME : 0);
}
static TIMER_CALLBACK( lfo_timer_cb )
@ -429,7 +429,7 @@ static TIMER_CALLBACK( lfo_timer_cb )
freq = MAXFREQ;
}
WRITE8_HANDLER( galaxian_lfo_freq_w )
WRITE8_DEVICE_HANDLER( galaxian_lfo_freq_w )
{
#if NEW_LFO
/* R18 1M,R17 470K,R16 220K,R15 100K */
@ -542,7 +542,7 @@ WRITE8_HANDLER( galaxian_lfo_freq_w )
static TIMER_CALLBACK( galaxian_sh_update )
{
const device_config *samples = devtag_get_device(machine, "samples");
const device_config *samples = devtag_get_device(machine, GAL_AUDIO);
/*
* NE555 8R, 8S and 8T are used as pulse position modulators
@ -560,16 +560,394 @@ static TIMER_CALLBACK( galaxian_sh_update )
}
const samples_interface galaxian_samples_interface =
static const samples_interface galaxian_custom_interface =
{
5,
NULL,
galaxian_sh_start
};
const samples_interface galaxian_custom_interface =
MACHINE_DRIVER_START( galaxian_audio )
/* sound hardware */
MDRV_SOUND_ADD(GAL_AUDIO, SAMPLES, 0)
MDRV_SOUND_CONFIG(galaxian_custom_interface)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_DRIVER_END
#else
#define XTAL 18432000
#define SOUND_CLOCK (XTAL/6/2) /* 1.536 MHz */
#define RNG_RATE (XTAL/3*2) /* RNG clock is XTAL/3*2 see Aaron's note in video/galaxian.c */
#define DISCRETE_BITSET(_N, _N1, _B, _OV) DISCRETE_TRANSFORM4(_N, _N1, (1 << ((_B)-1)), 0, _OV, "01&2>3*")
/* 74LS259 */
#define GAL_9M_Q4_Q7 NODE_10
#define GAL_9L_Q0 NODE_20 /* FS1 */
#define GAL_9L_Q1 NODE_21 /* FS2 */
#define GAL_9L_Q2 NODE_22 /* FS3 */
#define GAL_9L_Q3 NODE_23 /* HIT */
//#define GAL_9L_Q4 NODE_24
#define GAL_9L_Q5 NODE_25 /* FIRE */
#define GAL_9L_Q6 NODE_26 /* VOL1 */
#define GAL_9L_Q7 NODE_27 /* VOL2 */
#define GAL_6T NODE_28
#define TTL_OUT (4)
#define GAL_R15 RES_K(100)
#define GAL_R16 RES_K(220)
#define GAL_R17 RES_K(470)
#define GAL_R18 RES_K(1000)
#define GAL_R19 RES_K(330)
#define GAL_R20 RES_K(15)
#define GAL_R21 RES_K(100)
#define GAL_R22 RES_K(100)
#define GAL_R23 RES_K(470)
#define GAL_R24 RES_K(10)
#define GAL_R25 RES_K(100)
#define GAL_R26 RES_K(330)
#define GAL_R27 RES_K(10)
#define GAL_R28 RES_K(100)
#define GAL_R29 RES_K(220)
#define GAL_R30 RES_K(10)
#define GAL_R31 RES_K(47)
#define GAL_R32 RES_K(47)
#define GAL_R33 RES_K(10)
#define GAL_R34 RES_K(5.1)
#define GAL_R35 RES_K(150)
#define GAL_R36 RES_K(22)
#define GAL_R37 RES_K(470)
#define GAL_R38 RES_K(33)
#define GAL_R39 RES_K(22)
#define GAL_R40 RES_K(2.2)
#define GAL_R41 RES_K(100)
#define GAL_R43 RES_K(2.2)
#define GAL_R44 RES_K(10)
#define GAL_R45 RES_K(22)
#define GAL_R46 RES_K(10)
#define GAL_R47 RES_K(2.2)
#define GAL_R48 RES_K(2.2)
#define GAL_R49 RES_K(10)
#define GAL_R50 RES_K(22)
#define GAL_R51 RES_K(33)
#define GAL_R52 RES_K(15)
#define GAL_R91 RES_K(10)
#define GAL_C15 CAP_U(1)
#define GAL_C17 CAP_U(0.01)
#define GAL_C18 CAP_U(0.01)
#define GAL_C19 CAP_U(0.01)
#define GAL_C20 CAP_U(0.1)
#define GAL_C21 CAP_U(2.2)
#define GAL_C22 CAP_U(0.01)
#define GAL_C23 CAP_U(0.01)
#define GAL_C25 CAP_U(1)
#define GAL_C26 CAP_U(0.01)
#define GAL_C27 CAP_U(0.01)
#define GAL_C28 CAP_U(47)
#define GAL_C46 CAP_U(0.1)
static const discrete_dac_r1_ladder galaxian_bck_dac =
{
5,
NULL,
galaxian_sh_start
4, // size of ladder
{GAL_R18, GAL_R17, GAL_R16, GAL_R15, 0,0,0,0},
4.4, // 5V - diode junction (0.6V)
GAL_R20, // rBIAS
GAL_R19, // rGnd
0 // no C
};
static const discrete_555_cc_desc galaxian_bck_vco =
{
DISC_555_OUT_DC | DISC_555_OUT_CAP,
5, // B+ voltage of 555
DEFAULT_555_VALUES,
0.7 // Q2 junction voltage
};
static const discrete_555_desc galaxian_555_vco_desc =
{
DISC_555_OUT_ENERGY | DISC_555_OUT_DC,
5.0,
DEFAULT_555_CHARGE,
(5.0 - 0.5) // 10k means no real load
};
static const discrete_555_desc galaxian_555_fire_vco_desc =
{
DISC_555_OUT_ENERGY | DISC_555_OUT_DC,
5.0,
DEFAULT_555_CHARGE,
1.0 // Logic output
};
static const discrete_mixer_desc galaxian_bck_mixer_desc =
{
DISC_MIXER_IS_RESISTOR,
{GAL_R24, GAL_R27, GAL_R30},
{0,0,0},
{0,0,0,0}, /* no node capacitors */
0, 0,
GAL_C20,
0,
0, 1
};
static const discrete_lfsr_desc galaxian_lfsr =
{
DISC_CLK_IS_FREQ,
17, /* Bit Length */
0, /* Reset Value */
4, /* Use Bit 10 (QC of second LS164) as F0 input 0 */
16, /* Use Bit 23 (QH of third LS164) as F0 input 1 */
DISC_LFSR_XOR_INV_IN1, /* F0 is XOR */
DISC_LFSR_IN0, /* F1 is inverted F0*/
DISC_LFSR_REPLACE, /* F2 replaces the shifted register contents */
0x000001, /* Everything is shifted into the first bit only */
DISC_LFSR_FLAG_OUTPUT_F0, /* Output is result of F0 */
0 /* Output bit */
};
static const discrete_mixer_desc galaxian_mixer_desc =
{
DISC_MIXER_IS_RESISTOR,
{GAL_R51, 0, GAL_R50, 0, GAL_R34, GAL_R40, GAL_R43}, /* A, C, C, D */
{0, GAL_9L_Q6, 0, GAL_9L_Q7, 0, 0, 0},
{0,0,0,0,0,0,GAL_C26},
0, GAL_R91,
0,
GAL_C46,
0, 1
};
static const discrete_op_amp_filt_info galaxian_bandpass_desc =
{
GAL_R35, GAL_R36, RES_M(10), 0,
GAL_R37,
GAL_C22, GAL_C23, 0,
5.0*GAL_R39/(GAL_R38+GAL_R39),
5, 0
};
static DISCRETE_SOUND_START(galaxian)
/************************************************/
/* Input register mapping for galaxian */
/************************************************/
DISCRETE_INPUT_DATA(GAL_9M_Q4_Q7)
/* FS1 to FS3 */
DISCRETE_INPUT_LOGIC(GAL_9L_Q0)
DISCRETE_INPUT_LOGIC(GAL_9L_Q1)
DISCRETE_INPUT_LOGIC(GAL_9L_Q2)
/* HIT */
DISCRETE_INPUTX_DATA(GAL_9L_Q3, TTL_OUT, 0, 0)
/* FIRE */
DISCRETE_INPUT_LOGIC(GAL_9L_Q5)
/* Turns on / off resistors in mixer */
DISCRETE_INPUTX_DATA(GAL_9L_Q6, GAL_R49, 0, 0)
DISCRETE_INPUTX_DATA(GAL_9L_Q7, GAL_R52, 0, 0)
/* Pitch */
DISCRETE_INPUT_DATA(GAL_6T)
/************************************************/
/* Background */
/************************************************/
DISCRETE_DAC_R1(NODE_100, 1, GAL_9M_Q4_Q7, TTL_OUT, &galaxian_bck_dac)
DISCRETE_555_CC(NODE_105, 1, NODE_100, GAL_R21, GAL_C15, 0, 0, 0, &galaxian_bck_vco)
// Next is mult/add opamp circuit
DISCRETE_MULTADD(NODE_110, 1, NODE_105, GAL_R33/RES_3_PARALLEL(GAL_R31,GAL_R32,GAL_R33),
-5.0*GAL_R33/GAL_R31)
DISCRETE_CLAMP(NODE_111,1,NODE_110,0.0,5.0,0.0)
// The three 555
DISCRETE_555_ASTABLE_CV(NODE_115, GAL_9L_Q0, GAL_R22, GAL_R23, GAL_C17, NODE_111, &galaxian_555_vco_desc)
DISCRETE_555_ASTABLE_CV(NODE_116, GAL_9L_Q1, GAL_R25, GAL_R26, GAL_C18, NODE_111, &galaxian_555_vco_desc)
DISCRETE_555_ASTABLE_CV(NODE_117, GAL_9L_Q2, GAL_R28, GAL_R29, GAL_C19, NODE_111, &galaxian_555_vco_desc)
DISCRETE_MIXER3(NODE_120, 1, NODE_115, NODE_116, NODE_117, &galaxian_bck_mixer_desc)
/************************************************/
/* PITCH */
/************************************************/
/* Needs to be replaced by timer ... */
DISCRETE_BITSET(NODE_133, GAL_6T, 1, TTL_OUT) /* QA 74393 */
DISCRETE_BITSET(NODE_134, GAL_6T, 3, TTL_OUT) /* QC 74393 */
DISCRETE_BITSET(NODE_135, GAL_6T, 4, TTL_OUT) /* QD 74393 */
/************************************************/
/* HIT */
/************************************************/
/* NOISE */
/* since only a sample of the LFSR is latched @V2 we let the lfsr
* run at a lower speed
*/
DISCRETE_LFSR_NOISE(NODE_150, 1, 1, RNG_RATE/100, 1.0, 0, 0.5, &galaxian_lfsr)
DISCRETE_SQUAREWFIX(NODE_151,1,60*264/2,1.0,50,0.5,0) /* 2V signal */
DISCRETE_LOGIC_DFLIPFLOP(NODE_152,1,1,1,NODE_151,NODE_150)
/* Not 100% correct - Factor 2 to account for being always enabled */
DISCRETE_RCDISC5(NODE_155, 1, GAL_9L_Q3, (GAL_R35 + GAL_R36)*2, GAL_C21)
DISCRETE_MULTIPLY(NODE_156, 1, NODE_152, NODE_155)
DISCRETE_OP_AMP_FILTER(NODE_157, 1, NODE_156, 0, DISC_OP_AMP_FILTER_IS_BAND_PASS_1M, &galaxian_bandpass_desc)
/************************************************/
/* FIRE */
/************************************************/
DISCRETE_LOGIC_INVERT(NODE_160, 1, GAL_9L_Q5)
DISCRETE_MULTIPLY(NODE_161, 1, TTL_OUT, GAL_9L_Q5)
DISCRETE_MULTIPLY(NODE_162, 1, TTL_OUT, NODE_160) // inverted
DISCRETE_RCFILTER(NODE_163, 1, NODE_162, GAL_R47, GAL_C28)
/* Mix noise and 163 */
DISCRETE_MULTIPLY(NODE_164, 1, TTL_OUT, NODE_152)
DISCRETE_MULTIPLY(NODE_165, 1, 1.0/GAL_R46, NODE_164)
DISCRETE_MULTIPLY(NODE_166, 1, 1.0/GAL_R48, NODE_163)
DISCRETE_ADDER2(NODE_167, 1, NODE_165, NODE_166)
DISCRETE_MULTIPLY(NODE_168, 1, RES_2_PARALLEL(GAL_R46, GAL_R48), NODE_167)
DISCRETE_RCDISC5(NODE_170, 1, NODE_161, (GAL_R41)*2, GAL_C25)
DISCRETE_555_ASTABLE_CV(NODE_171, 1, GAL_R44, GAL_R45, GAL_C27, NODE_168, &galaxian_555_fire_vco_desc)
DISCRETE_MULTIPLY(NODE_172, 1, NODE_171, NODE_170)
/************************************************/
/* FINAL MIX */
/************************************************/
DISCRETE_MIXER7(NODE_280, 1, NODE_133, NODE_134, NODE_134, NODE_135, NODE_120, NODE_157, NODE_172, &galaxian_mixer_desc)
DISCRETE_OUTPUT(NODE_280, 32767.0/5.0*1.5)
//DISCRETE_WAVELOG2(GAL_9L_Q3, 10000, NODE_156, 10000)
DISCRETE_SOUND_END
static UINT8 lfo_val;
static emu_timer *pitch_timer;
static UINT8 pitch_l;
static UINT8 pitch_h;
static TIMER_CALLBACK( pitch_callback )
{
const device_config *device = devtag_get_device(machine, GAL_AUDIO);
timer_adjust_oneshot(pitch_timer, ATTOTIME_IN_HZ(SOUND_CLOCK / (256 - pitch_l)), 0);
pitch_h++;
if (pitch_h > 15)
pitch_h = 0;
discrete_sound_w(device, GAL_6T, pitch_h );
}
static SOUND_START(galaxian)
{
lfo_val = 0;
pitch_l = 0;
pitch_h = 0;
pitch_timer = timer_alloc(machine, pitch_callback, NULL);
timer_adjust_oneshot(pitch_timer, ATTOTIME_IN_HZ(SOUND_CLOCK/256), 0);
}
WRITE8_DEVICE_HANDLER( galaxian_lfo_freq_w )
{
UINT8 lfo_val_new = (lfo_val & ~(1<<offset)) | ((data & 0x01) << offset);
if (lfo_val != lfo_val_new)
{
lfo_val = lfo_val_new;
discrete_sound_w(device, GAL_9M_Q4_Q7, lfo_val);
}
}
WRITE8_DEVICE_HANDLER( galaxian_background_enable_w )
{
discrete_sound_w(device, NODE_RELATIVE(GAL_9L_Q0, offset), data & 0x01);
}
WRITE8_DEVICE_HANDLER( galaxian_noise_enable_w )
{
discrete_sound_w(device, GAL_9L_Q3, data & 0x01);
}
WRITE8_DEVICE_HANDLER( galaxian_vol_w )
{
discrete_sound_w(device, GAL_9L_Q6, data & 0x01);
}
/* FIXME: rename to fire to be consistent */
WRITE8_DEVICE_HANDLER( galaxian_shoot_enable_w )
{
discrete_sound_w(device, GAL_9L_Q5, data & 0x01);
}
/* FIXME: use timer ! -- IC 9J */
WRITE8_DEVICE_HANDLER( galaxian_pitch_w )
{
pitch_l = data;
}
/* FIXME: May be replaced by one call! */
WRITE8_DEVICE_HANDLER( galaxian_sound_w )
{
data &= 0x01;
switch (offset & 7)
{
case 0: /* FS1 (controls 555 timer at 8R) */
case 1: /* FS2 (controls 555 timer at 8S) */
case 2: /* FS3 (controls 555 timer at 8T) */
galaxian_background_enable_w(device, offset, data);
break;
case 3: /* HIT */
galaxian_noise_enable_w(device, 0, data);
break;
case 4: /* n/c */
break;
case 5: /* FIRE */
galaxian_shoot_enable_w(device, 0, data);
break;
case 6: /* VOL1 */
case 7: /* VOL2 */
galaxian_vol_w(device, offset & 1, data);
break;
}
}
MACHINE_DRIVER_START( galaxian_audio )
MDRV_SOUND_START(galaxian)
MDRV_SOUND_ADD(GAL_AUDIO, DISCRETE, 0)
MDRV_SOUND_CONFIG_DISCRETE(galaxian)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_DRIVER_END
#endif

View File

@ -17,15 +17,14 @@ Dip locations verified with manual
#include "includes/galaxian.h"
#include "includes/galaxold.h"
static int noise_data = 0;
static WRITE8_HANDLER( dambustr_noise_enable_w )
/* FIXME: Really needed? - Should be handled by either interface */
static WRITE8_DEVICE_HANDLER( dambustr_noise_enable_w )
{
if (data != noise_data) {
noise_data = data;
galaxian_noise_enable_w(space, offset, data);
galaxian_noise_enable_w(device, offset, data);
}
}
@ -48,14 +47,14 @@ static ADDRESS_MAP_START( dambustr_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0")
AM_RANGE(0xe002, 0xe003) AM_WRITE(galaxold_coin_counter_w)
AM_RANGE(0xe004, 0xe007) AM_WRITE(galaxian_lfo_freq_w)
AM_RANGE(0xe004, 0xe007) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0xe800, 0xefff) AM_READ_PORT("IN1")
AM_RANGE(0xe800, 0xe802) AM_WRITE(galaxian_background_enable_w)
AM_RANGE(0xe803, 0xe803) AM_WRITE(dambustr_noise_enable_w)
AM_RANGE(0xe804, 0xe804) AM_WRITE(galaxian_shoot_enable_w) // probably louder than normal shot
AM_RANGE(0xe805, 0xe805) AM_WRITE(galaxian_shoot_enable_w) // normal shot (like Galaxian)
AM_RANGE(0xe806, 0xe807) AM_WRITE(galaxian_vol_w)
AM_RANGE(0xe800, 0xe802) AM_DEVWRITE(GAL_AUDIO, galaxian_background_enable_w)
AM_RANGE(0xe803, 0xe803) AM_DEVWRITE(GAL_AUDIO, dambustr_noise_enable_w)
AM_RANGE(0xe804, 0xe804) AM_DEVWRITE(GAL_AUDIO, galaxian_shoot_enable_w) // probably louder than normal shot
AM_RANGE(0xe805, 0xe805) AM_DEVWRITE(GAL_AUDIO, galaxian_shoot_enable_w) // normal shot (like Galaxian)
AM_RANGE(0xe806, 0xe807) AM_DEVWRITE(GAL_AUDIO, galaxian_vol_w)
AM_RANGE(0xf000, 0xf7ff) AM_READ_PORT("DSW")
AM_RANGE(0xf001, 0xf001) AM_WRITE(galaxold_nmi_enable_w)
@ -63,11 +62,10 @@ static ADDRESS_MAP_START( dambustr_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xf006, 0xf006) AM_WRITE(galaxold_flip_screen_x_w)
AM_RANGE(0xf007, 0xf007) AM_WRITE(galaxold_flip_screen_y_w)
AM_RANGE(0xf800, 0xf800) AM_WRITE(galaxian_pitch_w)
AM_RANGE(0xf800, 0xf800) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
AM_RANGE(0xf800, 0xffff) AM_READ(watchdog_reset_r)
ADDRESS_MAP_END
static INPUT_PORTS_START( dambustr )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
@ -206,10 +204,7 @@ static MACHINE_DRIVER_START( dambustr )
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
/* sound hardware */
MDRV_SOUND_ADD("samples", SAMPLES, 0)
MDRV_SOUND_CONFIG(galaxian_samples_interface)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MDRV_IMPORT_FROM(galaxian_audio)
MACHINE_DRIVER_END

View File

@ -1167,7 +1167,14 @@ LATCH: (write 7000-77ff)
*/
/* map derived from schematics */
static ADDRESS_MAP_START( galaxian_map, ADDRESS_SPACE_PROGRAM, 8 )
static ADDRESS_MAP_START( galaxian_map_discrete, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x6004, 0x6007) AM_MIRROR(0x07f8) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0x6800, 0x6807) AM_MIRROR(0x07f8) AM_DEVWRITE(GAL_AUDIO, galaxian_sound_w)
AM_RANGE(0x7800, 0x7800) AM_MIRROR(0x07ff) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( galaxian_map_base, ADDRESS_SPACE_PROGRAM, 8 )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0x0400) AM_RAM
@ -1177,21 +1184,32 @@ static ADDRESS_MAP_START( galaxian_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x6000, 0x6001) AM_MIRROR(0x07f8) AM_WRITE(start_lamp_w)
AM_RANGE(0x6002, 0x6002) AM_MIRROR(0x07f8) AM_WRITE(coin_lock_w)
AM_RANGE(0x6003, 0x6003) AM_MIRROR(0x07f8) AM_WRITE(coin_count_0_w)
AM_RANGE(0x6004, 0x6007) AM_MIRROR(0x07f8) AM_WRITE(galaxian_lfo_freq_w)
//AM_RANGE(0x6004, 0x6007) AM_MIRROR(0x07f8) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0x6800, 0x6800) AM_MIRROR(0x07ff) AM_READ_PORT("IN1")
AM_RANGE(0x6800, 0x6807) AM_MIRROR(0x07f8) AM_WRITE(galaxian_sound_w)
//AM_RANGE(0x6800, 0x6807) AM_MIRROR(0x07f8) AM_DEVWRITE(GAL_AUDIO, galaxian_sound_w)
AM_RANGE(0x7000, 0x7000) AM_MIRROR(0x07ff) AM_READ_PORT("IN2")
AM_RANGE(0x7001, 0x7001) AM_MIRROR(0x07f8) AM_WRITE(irq_enable_w)
AM_RANGE(0x7004, 0x7004) AM_MIRROR(0x07f8) AM_WRITE(galaxian_stars_enable_w)
AM_RANGE(0x7006, 0x7006) AM_MIRROR(0x07f8) AM_WRITE(galaxian_flip_screen_x_w)
AM_RANGE(0x7007, 0x7007) AM_MIRROR(0x07f8) AM_WRITE(galaxian_flip_screen_y_w)
AM_RANGE(0x7800, 0x7800) AM_MIRROR(0x07ff) AM_WRITE(galaxian_pitch_w)
//AM_RANGE(0x7800, 0x7800) AM_MIRROR(0x07ff) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
AM_RANGE(0x7800, 0x7800) AM_MIRROR(0x07ff) AM_READ(watchdog_reset_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( galaxian_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_IMPORT_FROM(galaxian_map_base)
AM_IMPORT_FROM(galaxian_map_discrete)
ADDRESS_MAP_END
/* map derived from schematics */
static ADDRESS_MAP_START( mooncrst_map, ADDRESS_SPACE_PROGRAM, 8 )
static ADDRESS_MAP_START( mooncrst_map_discrete, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xa004, 0xa007) AM_MIRROR(0x07f8) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0xa800, 0xa807) AM_MIRROR(0x07f8) AM_DEVWRITE(GAL_AUDIO, galaxian_sound_w)
AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( mooncrst_map_base, ADDRESS_SPACE_PROGRAM, 8 )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x8000, 0x83ff) AM_MIRROR(0x0400) AM_RAM
@ -1200,18 +1218,24 @@ static ADDRESS_MAP_START( mooncrst_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x07ff) AM_READ_PORT("IN0")
AM_RANGE(0xa000, 0xa002) AM_MIRROR(0x07f8) AM_WRITE(galaxian_gfxbank_w)
AM_RANGE(0xa003, 0xa003) AM_MIRROR(0x07f8) AM_WRITE(coin_count_0_w)
AM_RANGE(0xa004, 0xa007) AM_MIRROR(0x07f8) AM_WRITE(galaxian_lfo_freq_w)
// AM_RANGE(0xa004, 0xa007) AM_MIRROR(0x07f8) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0xa800, 0xa800) AM_MIRROR(0x07ff) AM_READ_PORT("IN1")
AM_RANGE(0xa800, 0xa807) AM_MIRROR(0x07f8) AM_WRITE(galaxian_sound_w)
// AM_RANGE(0xa800, 0xa807) AM_MIRROR(0x07f8) AM_DEVWRITE(GAL_AUDIO, galaxian_sound_w)
AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x07ff) AM_READ_PORT("IN2")
AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x07f8) AM_WRITE(irq_enable_w)
AM_RANGE(0xb004, 0xb004) AM_MIRROR(0x07f8) AM_WRITE(galaxian_stars_enable_w)
AM_RANGE(0xb006, 0xb006) AM_MIRROR(0x07f8) AM_WRITE(galaxian_flip_screen_x_w)
AM_RANGE(0xb007, 0xb007) AM_MIRROR(0x07f8) AM_WRITE(galaxian_flip_screen_y_w)
AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_WRITE(galaxian_pitch_w)
// AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
AM_RANGE(0xb800, 0xb800) AM_MIRROR(0x07ff) AM_READ(watchdog_reset_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( mooncrst_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_IMPORT_FROM(mooncrst_map_base)
AM_IMPORT_FROM(mooncrst_map_discrete)
ADDRESS_MAP_END
/* map derived from schematics */
#if 0
@ -1726,14 +1750,6 @@ static MACHINE_DRIVER_START( galaxian_base )
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( galaxian_sound )
/* sound hardware */
MDRV_SOUND_ADD("samples", SAMPLES, 0)
MDRV_SOUND_CONFIG(galaxian_custom_interface)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( konami_base )
MDRV_IMPORT_FROM( galaxian_base )
@ -1798,7 +1814,7 @@ MACHINE_DRIVER_END
static MACHINE_DRIVER_START( galaxian )
MDRV_IMPORT_FROM(galaxian_base)
MDRV_IMPORT_FROM(galaxian_sound)
MDRV_IMPORT_FROM(galaxian_audio)
MACHINE_DRIVER_END
@ -1816,8 +1832,13 @@ static MACHINE_DRIVER_START( zigzag )
/* separate tile/sprite ROMs */
MDRV_GFXDECODE(pacmanbl)
/* basic machine hardware */
MDRV_CPU_MODIFY("maincpu")
MDRV_CPU_PROGRAM_MAP(galaxian_map_base) /* no discrete sound */
/* sound hardware */
MDRV_SOUND_ADD("ay", AY8910, 1789750)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_DRIVER_END
@ -1935,7 +1956,7 @@ static MACHINE_DRIVER_START( froggrmc )
/* alternate memory map */
MDRV_CPU_MODIFY("maincpu")
MDRV_CPU_PROGRAM_MAP(mooncrst_map)
MDRV_CPU_PROGRAM_MAP(mooncrst_map_base) /* no discrete sound ! */
MACHINE_DRIVER_END

View File

@ -393,7 +393,6 @@ static READ8_HANDLER( drivfrcg_port0_r )
return 0;
}
static ADDRESS_MAP_START( galaxold_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x47ff) AM_RAM
@ -407,19 +406,19 @@ static ADDRESS_MAP_START( galaxold_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x6000, 0x6001) AM_WRITE(galaxold_leds_w)
AM_RANGE(0x6002, 0x6002) AM_WRITE(galaxold_coin_lockout_w)
AM_RANGE(0x6003, 0x6003) AM_WRITE(galaxold_coin_counter_w)
AM_RANGE(0x6004, 0x6007) AM_WRITE(galaxian_lfo_freq_w)
AM_RANGE(0x6004, 0x6007) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0x6800, 0x6800) AM_READ_PORT("IN1")
AM_RANGE(0x6800, 0x6802) AM_WRITE(galaxian_background_enable_w)
AM_RANGE(0x6803, 0x6803) AM_WRITE(galaxian_noise_enable_w)
AM_RANGE(0x6805, 0x6805) AM_WRITE(galaxian_shoot_enable_w)
AM_RANGE(0x6806, 0x6807) AM_WRITE(galaxian_vol_w)
AM_RANGE(0x6800, 0x6802) AM_DEVWRITE(GAL_AUDIO, galaxian_background_enable_w)
AM_RANGE(0x6803, 0x6803) AM_DEVWRITE(GAL_AUDIO, galaxian_noise_enable_w)
AM_RANGE(0x6805, 0x6805) AM_DEVWRITE(GAL_AUDIO, galaxian_shoot_enable_w)
AM_RANGE(0x6806, 0x6807) AM_DEVWRITE(GAL_AUDIO, galaxian_vol_w)
AM_RANGE(0x7000, 0x7000) AM_READ_PORT("IN2")
AM_RANGE(0x7001, 0x7001) AM_WRITE(galaxold_nmi_enable_w)
AM_RANGE(0x7004, 0x7004) AM_WRITE(galaxold_stars_enable_w)
AM_RANGE(0x7006, 0x7006) AM_WRITE(galaxold_flip_screen_x_w)
AM_RANGE(0x7007, 0x7007) AM_WRITE(galaxold_flip_screen_y_w)
AM_RANGE(0x7800, 0x7fff) AM_READ(watchdog_reset_r)
AM_RANGE(0x7800, 0x7800) AM_WRITE(galaxian_pitch_w)
AM_RANGE(0x7800, 0x7800) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
AM_RANGE(0xfffc, 0xffff) AM_RAM
ADDRESS_MAP_END
@ -435,17 +434,18 @@ static ADDRESS_MAP_START( mooncrst_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x9880, 0x98ff) AM_RAM
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("IN0")
AM_RANGE(0xa003, 0xa003) AM_WRITE(galaxold_coin_counter_w)
AM_RANGE(0xa004, 0xa007) AM_WRITE(galaxian_lfo_freq_w)
AM_RANGE(0xa004, 0xa007) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1")
AM_RANGE(0xa800, 0xa802) AM_WRITE(galaxian_background_enable_w)
AM_RANGE(0xa803, 0xa803) AM_WRITE(galaxian_noise_enable_w)
AM_RANGE(0xa805, 0xa805) AM_WRITE(galaxian_shoot_enable_w)
AM_RANGE(0xa806, 0xa807) AM_WRITE(galaxian_vol_w)
AM_RANGE(0xa800, 0xa802) AM_DEVWRITE(GAL_AUDIO, galaxian_background_enable_w)
AM_RANGE(0xa803, 0xa803) AM_DEVWRITE(GAL_AUDIO, galaxian_noise_enable_w)
AM_RANGE(0xa805, 0xa805) AM_DEVWRITE(GAL_AUDIO, galaxian_shoot_enable_w)
AM_RANGE(0xa806, 0xa807) AM_DEVWRITE(GAL_AUDIO, galaxian_vol_w)
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW0") AM_WRITE(galaxold_nmi_enable_w)
AM_RANGE(0xb004, 0xb004) AM_WRITE(galaxold_stars_enable_w)
AM_RANGE(0xb006, 0xb006) AM_WRITE(galaxold_flip_screen_x_w)
AM_RANGE(0xb007, 0xb007) AM_WRITE(galaxold_flip_screen_y_w)
AM_RANGE(0xb800, 0xb800) AM_READWRITE(watchdog_reset_r, galaxian_pitch_w)
AM_RANGE(0xb800, 0xb800) AM_READ(watchdog_reset_r)
AM_RANGE(0xb800, 0xb800) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( rockclim_map, ADDRESS_SPACE_PROGRAM, 8 )
@ -465,16 +465,17 @@ static ADDRESS_MAP_START( rockclim_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("IN0")
AM_RANGE(0xa000, 0xa002) AM_WRITE(galaxold_gfxbank_w)// a002 - sprite bank
AM_RANGE(0xa003, 0xa003) AM_WRITE(galaxold_coin_counter_w)
AM_RANGE(0xa004, 0xa007) AM_WRITE(galaxian_lfo_freq_w)
AM_RANGE(0xa004, 0xa007) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1")
AM_RANGE(0xa800, 0xa802) AM_WRITE(galaxian_background_enable_w)
AM_RANGE(0xa803, 0xa803) AM_WRITE(galaxian_noise_enable_w)
AM_RANGE(0xa805, 0xa805) AM_WRITE(galaxian_shoot_enable_w)
AM_RANGE(0xa806, 0xa807) AM_WRITE(galaxian_vol_w)
AM_RANGE(0xa800, 0xa802) AM_DEVWRITE(GAL_AUDIO, galaxian_background_enable_w)
AM_RANGE(0xa803, 0xa803) AM_DEVWRITE(GAL_AUDIO, galaxian_noise_enable_w)
AM_RANGE(0xa805, 0xa805) AM_DEVWRITE(GAL_AUDIO, galaxian_shoot_enable_w)
AM_RANGE(0xa806, 0xa807) AM_DEVWRITE(GAL_AUDIO, galaxian_vol_w)
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW0") AM_WRITE(galaxold_nmi_enable_w)
AM_RANGE(0xb006, 0xb006) AM_WRITE(galaxold_flip_screen_x_w)
AM_RANGE(0xb007, 0xb007) AM_WRITE(galaxold_flip_screen_y_w)
AM_RANGE(0xb800, 0xb800) AM_READWRITE(watchdog_reset_r, galaxian_pitch_w)
AM_RANGE(0xb800, 0xb800) AM_READ(watchdog_reset_r)
AM_RANGE(0xb800, 0xb800) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( scramblb_map, ADDRESS_SPACE_PROGRAM, 8 )
@ -488,12 +489,12 @@ static ADDRESS_MAP_START( scramblb_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x6000, 0x6000) AM_READ_PORT("IN0")
AM_RANGE(0x6000, 0x6001) AM_WRITENOP /* sound triggers */
AM_RANGE(0x6003, 0x6003) AM_WRITE(galaxold_coin_counter_w)
AM_RANGE(0x6004, 0x6007) AM_WRITE(galaxian_lfo_freq_w)
AM_RANGE(0x6004, 0x6007) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0x6800, 0x6800) AM_READ_PORT("IN1")
AM_RANGE(0x6800, 0x6802) AM_WRITE(galaxian_background_enable_w)
AM_RANGE(0x6803, 0x6803) AM_WRITE(galaxian_noise_enable_w)
AM_RANGE(0x6805, 0x6805) AM_WRITE(galaxian_shoot_enable_w)
AM_RANGE(0x6806, 0x6807) AM_WRITE(galaxian_vol_w)
AM_RANGE(0x6800, 0x6802) AM_DEVWRITE(GAL_AUDIO, galaxian_background_enable_w)
AM_RANGE(0x6803, 0x6803) AM_DEVWRITE(GAL_AUDIO, galaxian_noise_enable_w)
AM_RANGE(0x6805, 0x6805) AM_DEVWRITE(GAL_AUDIO, galaxian_shoot_enable_w)
AM_RANGE(0x6806, 0x6807) AM_DEVWRITE(GAL_AUDIO, galaxian_vol_w)
AM_RANGE(0x7000, 0x7000) AM_READ_PORT("IN2")
AM_RANGE(0x7001, 0x7001) AM_WRITE(galaxold_nmi_enable_w)
AM_RANGE(0x7002, 0x7002) AM_WRITE(galaxold_coin_counter_w)
@ -501,13 +502,13 @@ static ADDRESS_MAP_START( scramblb_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x7004, 0x7004) AM_WRITE(galaxold_stars_enable_w)
AM_RANGE(0x7006, 0x7006) AM_WRITE(galaxold_flip_screen_x_w)
AM_RANGE(0x7007, 0x7007) AM_WRITE(galaxold_flip_screen_y_w)
AM_RANGE(0x7800, 0x7800) AM_READWRITE(watchdog_reset_r, galaxian_pitch_w)
AM_RANGE(0x7800, 0x7800) AM_READ(watchdog_reset_r)
AM_RANGE(0x7800, 0x7800) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
AM_RANGE(0x8102, 0x8102) AM_READ(scramblb_protection_1_r)
AM_RANGE(0x8202, 0x8202) AM_READ(scramblb_protection_2_r)
ADDRESS_MAP_END
static READ8_HANDLER( scramb2_protection_r ) { return 0x25; }
static READ8_HANDLER( scramb2_port0_r ) { return (input_port_read(space->machine, "IN0") >> offset) & 0x1; }
static READ8_HANDLER( scramb2_port1_r ) { return (input_port_read(space->machine, "IN1") >> offset) & 0x1; }
@ -534,7 +535,7 @@ static ADDRESS_MAP_START( scramb2_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x7006, 0x7006) AM_WRITENOP
AM_RANGE(0x7007, 0x7007) AM_WRITENOP
AM_RANGE(0x7800, 0x7807) AM_READ(scramb2_port2_r) // reads from 8 addresses, 1 bit per address
AM_RANGE(0x7800, 0x7800) AM_WRITE(galaxian_pitch_w)
AM_RANGE(0x7800, 0x7800) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
ADDRESS_MAP_END
@ -552,23 +553,23 @@ static ADDRESS_MAP_START( _4in1_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x6000, 0x6001) AM_WRITE(galaxold_leds_w)
// AM_RANGE(0x6002, 0x6002) AM_WRITE(galaxold_coin_lockout_w)
AM_RANGE(0x6003, 0x6003) AM_WRITE(galaxold_coin_counter_w)
AM_RANGE(0x6004, 0x6007) AM_WRITE(galaxian_lfo_freq_w)
AM_RANGE(0x6004, 0x6007) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0x6800, 0x6800) AM_READ_PORT("IN1")
AM_RANGE(0x6800, 0x6802) AM_WRITE(galaxian_background_enable_w)
AM_RANGE(0x6800, 0x6802) AM_DEVWRITE(GAL_AUDIO, galaxian_background_enable_w)
// AM_RANGE(0x6803, 0x6803) AM_WRITE(galaxian_noise_enable_w) /* not hooked up? */
AM_RANGE(0x6805, 0x6805) AM_WRITE(galaxian_shoot_enable_w)
AM_RANGE(0x6806, 0x6807) AM_WRITE(galaxian_vol_w)
AM_RANGE(0x6805, 0x6805) AM_DEVWRITE(GAL_AUDIO, galaxian_shoot_enable_w)
AM_RANGE(0x6806, 0x6807) AM_DEVWRITE(GAL_AUDIO, galaxian_vol_w)
AM_RANGE(0x7000, 0x7000) AM_READ_PORT("DSW0")
AM_RANGE(0x7001, 0x7001) AM_WRITE(galaxold_nmi_enable_w)
AM_RANGE(0x7004, 0x7004) AM_WRITE(galaxold_stars_enable_w)
AM_RANGE(0x7006, 0x7006) AM_WRITE(galaxold_flip_screen_x_w)
AM_RANGE(0x7007, 0x7007) AM_WRITE(galaxold_flip_screen_y_w)
AM_RANGE(0x7800, 0x78ff) AM_READWRITE(watchdog_reset_r, galaxian_pitch_w)
AM_RANGE(0x7800, 0x78ff) AM_READ(watchdog_reset_r)
AM_RANGE(0x7800, 0x78ff) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
AM_RANGE(0x8000, 0x8000) AM_WRITE(_4in1_bank_w)
AM_RANGE(0xc000, 0xdfff) AM_ROM /* fixed menu code */
ADDRESS_MAP_END
static ADDRESS_MAP_START( bagmanmc_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x6000, 0x67ff) AM_RAM
@ -581,12 +582,12 @@ static ADDRESS_MAP_START( bagmanmc_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("IN0")
AM_RANGE(0xa003, 0xa003) AM_WRITE(galaxold_coin_counter_w)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1")
AM_RANGE(0xa803, 0xa803) AM_WRITE(galaxian_noise_enable_w)
AM_RANGE(0xa803, 0xa803) AM_DEVWRITE(GAL_AUDIO, galaxian_noise_enable_w)
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
AM_RANGE(0xb001, 0xb001) AM_WRITE(galaxold_nmi_enable_w)
AM_RANGE(0xb006, 0xb006) AM_WRITE(galaxold_flip_screen_x_w)
AM_RANGE(0xb007, 0xb007) AM_WRITE(galaxold_flip_screen_y_w)
AM_RANGE(0xb800, 0xb800) AM_READWRITE(watchdog_reset_r, galaxian_pitch_w)
AM_RANGE(0xb800, 0xb800) AM_READ(watchdog_reset_r) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( dkongjrm_map, ADDRESS_SPACE_PROGRAM, 8 )
@ -601,20 +602,19 @@ static ADDRESS_MAP_START( dkongjrm_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xa003, 0xa003) AM_WRITE(galaxold_coin_counter_w)
//AM_RANGE(0xa004, 0xa007) AM_WRITE(galaxian_lfo_freq_w)
AM_RANGE(0xa800, 0xa8ff) AM_READ_PORT("IN1")
AM_RANGE(0xa800, 0xa802) AM_WRITE(galaxian_background_enable_w)
AM_RANGE(0xa803, 0xa803) AM_WRITE(galaxian_noise_enable_w)
AM_RANGE(0xa800, 0xa802) AM_DEVWRITE(GAL_AUDIO, galaxian_background_enable_w)
AM_RANGE(0xa803, 0xa803) AM_DEVWRITE(GAL_AUDIO, galaxian_noise_enable_w)
//AM_RANGE(0xa805, 0xa805) AM_WRITE(galaxian)
AM_RANGE(0xa806, 0xa807) AM_WRITE(galaxian_vol_w)
AM_RANGE(0xa806, 0xa807) AM_DEVWRITE(GAL_AUDIO, galaxian_vol_w)
AM_RANGE(0xb000, 0xb0ff) AM_READ_PORT("IN2")
AM_RANGE(0xb000, 0xb000) AM_WRITE(galaxold_gfxbank_w)
AM_RANGE(0xb001, 0xb001) AM_WRITE(galaxold_nmi_enable_w)
//AM_RANGE(0xb004, 0xb004) AM_WRITE(galaxold_stars_enable_w)
AM_RANGE(0xb006, 0xb006) AM_WRITE(galaxold_flip_screen_x_w)
AM_RANGE(0xb007, 0xb007) AM_WRITE(galaxold_flip_screen_y_w)
AM_RANGE(0xb800, 0xb800) AM_READWRITE(watchdog_reset_r, galaxian_pitch_w)
AM_RANGE(0xb800, 0xb800) AM_READ(watchdog_reset_r) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ozon1_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x2fff) AM_ROM
AM_RANGE(0x4000, 0x4200) AM_RAM
@ -645,14 +645,14 @@ static ADDRESS_MAP_START( drivfrcg, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x1500, 0x1500) AM_MIRROR(0x6000) AM_READ_PORT("IN0")
AM_RANGE(0x1503, 0x1503) AM_MIRROR(0x6000) AM_WRITE(galaxold_coin_counter_w)
AM_RANGE(0x1580, 0x1580) AM_MIRROR(0x6000) AM_READ_PORT("IN1")
AM_RANGE(0x1580, 0x1582) AM_MIRROR(0x6000) AM_WRITE(galaxian_background_enable_w)
AM_RANGE(0x1580, 0x1582) AM_MIRROR(0x6000) AM_DEVWRITE(GAL_AUDIO, galaxian_background_enable_w)
AM_RANGE(0x1583, 0x1583) AM_MIRROR(0x6000) AM_WRITENOP
AM_RANGE(0x1585, 0x1585) AM_MIRROR(0x6000) AM_WRITENOP
AM_RANGE(0x1586, 0x1587) AM_MIRROR(0x6000) AM_WRITE(galaxian_lfo_freq_w)
AM_RANGE(0x1600, 0x1600) AM_MIRROR(0x6000) AM_READ_PORT("DSW0") AM_WRITE(galaxian_pitch_w)
AM_RANGE(0x1586, 0x1587) AM_MIRROR(0x6000) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0x1600, 0x1600) AM_MIRROR(0x6000) AM_READ_PORT("DSW0") AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
AM_RANGE(0x1700, 0x1700) AM_MIRROR(0x6000) AM_READ_PORT("DSW1") AM_WRITENOP
AM_RANGE(0x1701, 0x1701) AM_MIRROR(0x6000) AM_WRITENOP
AM_RANGE(0x1704, 0x1707) AM_MIRROR(0x6000) AM_WRITE(galaxian_vol_w)
AM_RANGE(0x1704, 0x1707) AM_MIRROR(0x6000) AM_DEVWRITE(GAL_AUDIO, galaxian_vol_w)
AM_RANGE(0x1800, 0x1bff) AM_MIRROR(0x6000) AM_WRITE(galaxold_videoram_w) AM_BASE(&galaxold_videoram)
AM_RANGE(0x1c00, 0x1fff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x2000, 0x2fff) AM_ROM
@ -698,15 +698,15 @@ static ADDRESS_MAP_START( hunchbkg, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x1500, 0x1500) AM_MIRROR(0x6000) AM_READ_PORT("IN0")
AM_RANGE(0x1503, 0x1503) AM_MIRROR(0x6000) AM_WRITE(galaxold_coin_counter_w)
AM_RANGE(0x1580, 0x1580) AM_MIRROR(0x6000) AM_READ_PORT("IN1")
AM_RANGE(0x1580, 0x1582) AM_MIRROR(0x6000) AM_WRITE(galaxian_background_enable_w)
AM_RANGE(0x1580, 0x1582) AM_MIRROR(0x6000) AM_DEVWRITE(GAL_AUDIO, galaxian_background_enable_w)
AM_RANGE(0x1583, 0x1583) AM_MIRROR(0x6000) AM_WRITENOP
AM_RANGE(0x1584, 0x1587) AM_MIRROR(0x6000) AM_WRITE(galaxian_lfo_freq_w)
AM_RANGE(0x1584, 0x1587) AM_MIRROR(0x6000) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0x1600, 0x1600) AM_MIRROR(0x6000) AM_READ_PORT("DSW0")
AM_RANGE(0x1600, 0x1601) AM_MIRROR(0x6000) AM_WRITENOP
AM_RANGE(0x1604, 0x1604) AM_MIRROR(0x6000) AM_WRITENOP
AM_RANGE(0x1606, 0x1606) AM_MIRROR(0x6000) AM_WRITE(galaxold_flip_screen_x_w)
AM_RANGE(0x1607, 0x1607) AM_MIRROR(0x6000) AM_WRITE(galaxold_flip_screen_y_w)
AM_RANGE(0x1680, 0x1680) AM_MIRROR(0x6000) AM_READWRITE(SMH_NOP, galaxian_pitch_w)
AM_RANGE(0x1680, 0x1680) AM_MIRROR(0x6000) AM_READ(SMH_NOP) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
AM_RANGE(0x1800, 0x1bff) AM_MIRROR(0x6000) AM_WRITE(galaxold_videoram_w) AM_BASE(&galaxold_videoram)
AM_RANGE(0x1c00, 0x1fff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x2000, 0x2fff) AM_ROM
@ -714,6 +714,7 @@ static ADDRESS_MAP_START( hunchbkg, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x6000, 0x6fff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( hunchbkg_io, ADDRESS_SPACE_IO, 8 )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READNOP // not used
AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
@ -764,16 +765,16 @@ static ADDRESS_MAP_START( tazzmang, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x9800, 0x9800) AM_READ(watchdog_reset_r)
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("IN0")
AM_RANGE(0xa7ff, 0xa7ff) AM_READ_PORT("IN0") /* mirror */
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1") AM_WRITE(galaxian_background_enable_w)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1") AM_DEVWRITE(GAL_AUDIO, galaxian_background_enable_w)
AM_RANGE(0xa803, 0xa803) AM_WRITE(galaxold_coin_counter_w)
AM_RANGE(0xa805, 0xa805) AM_WRITE(galaxian_shoot_enable_w)
AM_RANGE(0xa806, 0xa807) AM_WRITE(galaxian_vol_w)
AM_RANGE(0xa805, 0xa805) AM_DEVWRITE(GAL_AUDIO, galaxian_shoot_enable_w)
AM_RANGE(0xa806, 0xa807) AM_DEVWRITE(GAL_AUDIO, galaxian_vol_w)
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW0")
AM_RANGE(0xb001, 0xb001) AM_WRITE(galaxold_nmi_enable_w)
AM_RANGE(0xb004, 0xb004) AM_WRITE(galaxold_stars_enable_w)
AM_RANGE(0xb006, 0xb006) AM_WRITE(galaxold_flip_screen_x_w)
AM_RANGE(0xb007, 0xb007) AM_WRITE(galaxold_flip_screen_y_w)
AM_RANGE(0xb800, 0xb800) AM_READ(watchdog_reset_r) AM_WRITE(galaxian_pitch_w)
AM_RANGE(0xb800, 0xb800) AM_READ(watchdog_reset_r) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( racknrol, ADDRESS_SPACE_PROGRAM, 8 )
@ -817,18 +818,18 @@ static ADDRESS_MAP_START( ckongg_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xc000, 0xc001) AM_WRITE(galaxold_leds_w)
AM_RANGE(0xc002, 0xc002) AM_WRITE(galaxold_coin_lockout_w)
AM_RANGE(0xc003, 0xc003) AM_WRITE(galaxold_coin_counter_w)
AM_RANGE(0xc004, 0xc007) AM_WRITE(galaxian_lfo_freq_w)
AM_RANGE(0xc004, 0xc007) AM_DEVWRITE(GAL_AUDIO, galaxian_lfo_freq_w)
AM_RANGE(0xc400, 0xc400) AM_READ_PORT("IN1")
AM_RANGE(0xc400, 0xc402) AM_WRITE(galaxian_background_enable_w)
AM_RANGE(0xc403, 0xc403) AM_WRITE(galaxian_noise_enable_w)
AM_RANGE(0xc405, 0xc405) AM_WRITE(galaxian_shoot_enable_w)
AM_RANGE(0xc406, 0xc407) AM_WRITE(galaxian_vol_w)
AM_RANGE(0xc400, 0xc402) AM_DEVWRITE(GAL_AUDIO, galaxian_background_enable_w)
AM_RANGE(0xc403, 0xc403) AM_DEVWRITE(GAL_AUDIO, galaxian_noise_enable_w)
AM_RANGE(0xc405, 0xc405) AM_DEVWRITE(GAL_AUDIO, galaxian_shoot_enable_w)
AM_RANGE(0xc406, 0xc407) AM_DEVWRITE(GAL_AUDIO, galaxian_vol_w)
AM_RANGE(0xc800, 0xc800) AM_READ_PORT("DSW0")
AM_RANGE(0xc801, 0xc801) AM_WRITE(galaxold_nmi_enable_w)
AM_RANGE(0xc804, 0xc804) AM_WRITENOP // link cut
AM_RANGE(0xc806, 0xc806) AM_WRITE(galaxold_flip_screen_x_w)
AM_RANGE(0xc807, 0xc807) AM_WRITE(galaxold_flip_screen_y_w)
AM_RANGE(0xcc00, 0xcc00) AM_READWRITE(watchdog_reset_r, galaxian_pitch_w)
AM_RANGE(0xcc00, 0xcc00) AM_READ(watchdog_reset_r) AM_DEVWRITE(GAL_AUDIO, galaxian_pitch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( kkgalax_map, ADDRESS_SPACE_PROGRAM, 8 )
@ -2130,9 +2131,7 @@ static MACHINE_DRIVER_START( galaxian )
MDRV_IMPORT_FROM(galaxold_base)
/* sound hardware */
MDRV_SOUND_ADD("samples", SAMPLES, 0)
MDRV_SOUND_CONFIG(galaxian_samples_interface)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MDRV_IMPORT_FROM(galaxian_audio)
MACHINE_DRIVER_END
@ -2289,9 +2288,8 @@ static MACHINE_DRIVER_START( drivfrcg )
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD("samples", SAMPLES, 0)
MDRV_SOUND_CONFIG(galaxian_samples_interface)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MDRV_IMPORT_FROM(galaxian_audio)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( bongo )
@ -2331,9 +2329,8 @@ static MACHINE_DRIVER_START( hunchbkg )
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD("samples", SAMPLES, 0)
MDRV_SOUND_CONFIG(galaxian_samples_interface)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MDRV_IMPORT_FROM(galaxian_audio)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( harem )

View File

@ -4,8 +4,13 @@
***************************************************************************/
#include "sound/samples.h"
#define GALAXIAN_USE_DISCRETE (0)
#if GALAXIAN_USE_DISCRETE
#include "sound/discrete.h"
#else
#include "sound/samples.h"
#endif
/* we scale horizontally by 3 to render stars correctly */
#define GALAXIAN_XSCALE 3
@ -126,13 +131,19 @@ void jumpbug_extend_sprite_info(const UINT8 *base, UINT8 *sx, UINT8 *sy, UINT8 *
/*----------- defined in audio/galaxian.c -----------*/
extern const samples_interface galaxian_samples_interface;
extern const samples_interface galaxian_custom_interface;
#if GALAXIAN_USE_DISCRETE
#define GAL_AUDIO "discrete"
#else
#define GAL_AUDIO "samples"
#endif
MACHINE_DRIVER_EXTERN( galaxian_audio );
WRITE8_DEVICE_HANDLER( galaxian_sound_w );
WRITE8_DEVICE_HANDLER( galaxian_pitch_w );
WRITE8_DEVICE_HANDLER( galaxian_vol_w );
WRITE8_DEVICE_HANDLER( galaxian_noise_enable_w );
WRITE8_DEVICE_HANDLER( galaxian_background_enable_w );
WRITE8_DEVICE_HANDLER( galaxian_shoot_enable_w );
WRITE8_DEVICE_HANDLER( galaxian_lfo_freq_w );
WRITE8_HANDLER( galaxian_sound_w );
WRITE8_HANDLER( galaxian_pitch_w );
WRITE8_HANDLER( galaxian_vol_w );
WRITE8_HANDLER( galaxian_noise_enable_w );
WRITE8_HANDLER( galaxian_background_enable_w );
WRITE8_HANDLER( galaxian_shoot_enable_w );
WRITE8_HANDLER( galaxian_lfo_freq_w );