TTL_7404_INVERT(ic_c4a, ic_b6a) TTL_7483(ic_b4, ic_a4c, ic_a4b, ic_b6a, low, ic_c4a, high, high, low, low) ALIAS(a6, ic_b4.S1) ALIAS(b6, ic_b4.S2) ALIAS(c6, ic_b4.S3) ALIAS(d6, ic_b4.S4) // ---------------------------------------------------------------------------------------- // serve monoflop // ---------------------------------------------------------------------------------------- TTL_7404_INVERT(f4_trig, rstspeed) RES(ic_f4_serve_R, RES_K(330)) CAP(ic_f4_serve_C, CAP_U(4.7)) NE555(ic_f4_serve) NET_C(ic_f4_serve.VCC, V5) NET_C(ic_f4_serve.GND, GND) NET_C(ic_f4_serve.RESET, V5) NET_C(ic_f4_serve_R.1, V5) NET_C(ic_f4_serve_R.2, ic_f4_serve.THRESH) NET_C(ic_f4_serve_R.2, ic_f4_serve.DISCH) NET_C(f4_trig, ic_f4_serve.TRIG) NET_C(ic_f4_serve_R.2, ic_f4_serve_C.1) NET_C(GND, ic_f4_serve_C.2) TTL_7427_NOR(ic_e5a, ic_f4_serve.OUT, StopG, runQ) TTL_7474(ic_b5b_serve, pad1, ic_e5a, ic_e5a, high)
SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); CDP1864(config, m_cti, 1.75_MHz_XTAL).set_screen(SCREEN_TAG); m_cti->inlace_cb().set_constant(0); m_cti->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT); m_cti->dma_out_cb().set(FUNC(cosmicos_state::dmaout_w)); m_cti->efx_cb().set(FUNC(cosmicos_state::efx_w)); m_cti->rdata_cb().set_constant(1); m_cti->gdata_cb().set_constant(1); m_cti->bdata_cb().set_constant(1); m_cti->set_chrominance(RES_K(2), 0, 0, 0); // R2 m_cti->add_route(ALL_OUTPUTS, "mono", 0.25); /* devices */ MCFG_QUICKLOAD_ADD("quickload", cosmicos_state, cosmicos, "bin") CASSETTE(config, m_cassette); m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED); /* internal ram */ RAM(config, RAM_TAG).set_default_size("256").set_extra_options("4K,48K"); MACHINE_CONFIG_END /* ROMs */ ROM_START( cosmicos ) ROM_REGION( 0x1000, CDP1802_TAG, 0 )
if (rising_bits & 0x10) sample_start(state->m_samples, 2, 2, 0); /* Balloon hit and bomb drops */ state->m_c8080bw_flip_screen = data & 0x20; state->m_port_2_last_extra = data; } /*******************************************************/ /* */ /* Taito "Indian Battle" */ /* Sept 2005, D.R. */ /*******************************************************/ static const discrete_dac_r1_ladder indianbt_music_dac = {3, {0, RES_K(47), RES_K(12)}, 0, 0, 0, CAP_U(0.1)}; #define INDIANBT_MUSIC_CLK (7680.0*2*2*2) /* Nodes - Inputs */ #define INDIANBT_MUSIC_DATA NODE_01 /* Nodes - Sounds */ #define INDIANBT_MUSIC NODE_11 DISCRETE_SOUND_START(indianbt) DISCRETE_INPUT_DATA (INDIANBT_MUSIC_DATA) /****************************************************************************** * * Music Generator
{ m_efx = state; } static CDP1864_INTERFACE( cosmicos_cdp1864_intf ) { CDP1802_TAG, SCREEN_TAG, CDP1864_INTERLACED, DEVCB_LINE_VCC, DEVCB_LINE_VCC, DEVCB_LINE_VCC, DEVCB_CPU_INPUT_LINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), DEVCB_DRIVER_LINE_MEMBER(cosmicos_state, dmaout_w), DEVCB_DRIVER_LINE_MEMBER(cosmicos_state, efx_w), RES_K(2), // R2 0, // not connected 0, // not connected 0 // not connected }; bool cosmicos_state::screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect) { cdp1864_update(m_cti, &bitmap, &cliprect); return 0; } /* CDP1802 Configuration */ READ_LINE_MEMBER( cosmicos_state::wait_r )
MACHINE_RESET(malzak) { // val++; // mame_printf_debug("val = %X\n",val); } static struct SN76477interface sn76477_intf = { 0, /* N/C */ /* 4 noise_res */ 0, /* N/C */ /* 5 filter_res */ 0, /* N/C */ /* 6 filter_cap */ 0, /* N/C */ /* 7 decay_res */ 0, /* N/C */ /* 8 attack_decay_cap */ RES_K(100), /* 10 attack_res */ RES_K(56), /* 11 amplitude_res */ RES_K(10), /* 12 feedback_res */ 0, /* N/C */ /* 16 vco_voltage */ CAP_U(0.1), /* 17 vco_cap */ RES_K(8.2), /* 18 vco_res */ 5.0, /* 19 pitch_voltage */ RES_K(120), /* 20 slf_res */ CAP_U(1.0), /* 21 slf_cap */ 0, /* N/C */ /* 23 oneshot_cap */ 0, /* N/C */ /* 24 oneshot_res */ 0, /* 22 vco */ 1, /* 26 mixer A */ 1, /* 25 mixer B */ 1, /* 27 mixer C */ 1, /* 1 envelope 1 */
static MACHINE_RESET( nitedrvr ) { timer_pulse(PERIOD_OF_555_ASTABLE(RES_K(180), 330, CAP_U(1)), NULL, 0, nitedrvr_crash_toggle_callback); nitedrvr_register_machine_vars(); }
16, /* Bit Length */ 0, /* Reset Value */ 6, /* Use Bit 6 as XOR input 0 */ 14, /* Use Bit 14 as XOR input 1 */ DISC_LFSR_XNOR, /* Feedback stage1 is XNOR */ DISC_LFSR_OR, /* Feedback stage2 is just stage 1 output OR with external feed */ DISC_LFSR_REPLACE, /* Feedback stage3 replaces the shifted register contents */ 0x000001, /* Everything is shifted into the first bit only */ 0, /* Output is already inverted by XNOR */ 16 /* Output bit is feedback bit */ }; static const discrete_dac_r1_ladder asteroid_thump_dac1 = { 4, // size of ladder {RES_K(220), RES_K(100), RES_K(47), RES_K(22)}, //R44-R47 4.3, // 5v - diode junction RES_K(6.8), // R49 RES_K(47), // R44 CAP_U(0.01) // C27 }; static const discrete_555_cc_desc asteroid_thump_555cc = { DISC_555_OUT_SQW | DISC_555_OUT_AC | DISCRETE_555_CC_TO_CAP, 5, // B+ voltage of 555 DEFAULT_555_VALUES, 0.8 // VBE 2N3906 (Si) }; #define ASTEROID_SAUCER_SND_EN NODE_01
TTL_7474_DIP(U3A) // FIXME: need 74LS family model (higher input impedance, half the sink capability) CD4016_DIP(U5D) NET_C(VCC, /*U3A.14,*/ U5D.14) // 7474 model doesn't have Vcc pin NET_C(GND, /*U3A.7,*/ U5D.7) // 7474 model doesn't have GND pin NET_C(VCC, U3A.10, U3A.11, U3A.12, U3A.13) // only half of this chip is used in this audio section - tie up the other inputs // ANAL1/IOA3/IOA4 -> RULLANTE/CASSA CAP(C61, CAP_U(10)) CAP(C62, CAP_P(1000)) CAP(C63, CAP_U(0.01)) CAP(C68, CAP_U(0.1)) RES(R84, RES_K(1.5)) RES(R102, RES_K(10)) RES(R103, RES_K(10)) RES(R104, RES_K(120)) RES(R105, RES_K(56)) RES(R120, RES_K(47)) RES(R121, 680) // incorrectly labelled R128 on schematic RES(R122, RES_K(33)) RES(R123, RES_K(1)) RES(R124, RES_K(39)) RES(R125, RES_K(560)) RES(R126, RES_K(470)) RES(R127, RES_K(100)) RES(R128, RES_K(56)) RES(R129, RES_K(1)) RES(R130, RES_K(33))
/* video hardware */ MCFG_GFXDECODE_ADD("gfxdecode", "palette", ccastles) MCFG_PALETTE_ADD("palette", 32) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, 0, HTOTAL - 1, VTOTAL, 0, VTOTAL - 1) /* will be adjusted later */ MCFG_SCREEN_UPDATE_DRIVER(ccastles_state, screen_update_ccastles) MCFG_SCREEN_PALETTE("palette") /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("pokey1", POKEY, MASTER_CLOCK/8) /* NOTE: 1k + 0.2k is not 100% exact, but should not make an audible difference */ MCFG_POKEY_OUTPUT_OPAMP(RES_K(1) + RES_K(0.2), CAP_U(0.01), 5.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_SOUND_ADD("pokey2", POKEY, MASTER_CLOCK/8) /* NOTE: 1k + 0.2k is not 100% exact, but should not make an audible difference */ MCFG_POKEY_OUTPUT_OPAMP(RES_K(1) + RES_K(0.2), CAP_U(0.01), 5.0) MCFG_POKEY_ALLPOT_R_CB(IOPORT("IN1")) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END /************************************* * * ROM definitions *
void gyruss_state::gyruss(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, MASTER_CLOCK/6); /* 3.072 MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &gyruss_state::main_cpu1_map); KONAMI1(config, m_subcpu, MASTER_CLOCK/12); /* 1.536 MHz */ m_subcpu->set_addrmap(AS_PROGRAM, &gyruss_state::main_cpu2_map); Z80(config, m_audiocpu, SOUND_CLOCK/4); /* 3.579545 MHz */ m_audiocpu->set_addrmap(AS_PROGRAM, &gyruss_state::audio_cpu1_map); m_audiocpu->set_addrmap(AS_IO, &gyruss_state::audio_cpu1_io_map); I8039(config, m_audiocpu_2, XTAL(8'000'000)); m_audiocpu_2->set_addrmap(AS_PROGRAM, &gyruss_state::audio_cpu2_map); m_audiocpu_2->set_addrmap(AS_IO, &gyruss_state::audio_cpu2_io_map); m_audiocpu_2->p1_out_cb().set(FUNC(gyruss_state::gyruss_dac_w)); m_audiocpu_2->p2_out_cb().set(FUNC(gyruss_state::gyruss_irq_clear_w)); config.m_minimum_quantum = attotime::from_hz(6000); ls259_device &mainlatch(LS259(config, "mainlatch")); // 3C mainlatch.q_out_cb<0>().set(FUNC(gyruss_state::master_nmi_mask_w)); mainlatch.q_out_cb<2>().set(FUNC(gyruss_state::coin_counter_1_w)); mainlatch.q_out_cb<3>().set(FUNC(gyruss_state::coin_counter_2_w)); mainlatch.q_out_cb<5>().set(FUNC(gyruss_state::flipscreen_w)); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); m_screen->set_screen_update(FUNC(gyruss_state::screen_update_gyruss)); m_screen->set_palette(m_palette); m_screen->screen_vblank().set(FUNC(gyruss_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_gyruss); PALETTE(config, m_palette, FUNC(gyruss_state::gyruss_palette), 16*4+16*16, 32); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); GENERIC_LATCH_8(config, "soundlatch"); GENERIC_LATCH_8(config, "soundlatch2"); ay8910_device &ay1(AY8910(config, "ay1", SOUND_CLOCK/8)); ay1.set_flags(AY8910_DISCRETE_OUTPUT); ay1.set_resistors_load(RES_K(3.3), RES_K(3.3), RES_K(3.3)); ay1.port_b_write_callback().set(FUNC(gyruss_state::gyruss_filter0_w)); ay1.add_route(0, "discrete", 1.0, 0); ay1.add_route(1, "discrete", 1.0, 1); ay1.add_route(2, "discrete", 1.0, 2); ay8910_device &ay2(AY8910(config, "ay2", SOUND_CLOCK/8)); ay2.set_flags(AY8910_DISCRETE_OUTPUT); ay2.set_resistors_load(RES_K(3.3), RES_K(3.3), RES_K(3.3)); ay2.port_b_write_callback().set(FUNC(gyruss_state::gyruss_filter1_w)); ay2.add_route(0, "discrete", 1.0, 3); ay2.add_route(1, "discrete", 1.0, 4); ay2.add_route(2, "discrete", 1.0, 5); ay8910_device &ay3(AY8910(config, "ay3", SOUND_CLOCK/8)); ay3.set_flags(AY8910_DISCRETE_OUTPUT); ay3.set_resistors_load(RES_K(3.3), RES_K(3.3), RES_K(3.3)); ay3.port_a_read_callback().set(FUNC(gyruss_state::gyruss_portA_r)); ay3.add_route(0, "discrete", 1.0, 6); ay3.add_route(1, "discrete", 1.0, 7); ay3.add_route(2, "discrete", 1.0, 8); ay8910_device &ay4(AY8910(config, "ay4", SOUND_CLOCK/8)); ay4.set_flags(AY8910_DISCRETE_OUTPUT); ay4.set_resistors_load(RES_K(3.3), RES_K(3.3), RES_K(3.3)); ay4.add_route(0, "discrete", 1.0, 9); ay4.add_route(1, "discrete", 1.0, 10); ay4.add_route(2, "discrete", 1.0, 11); ay8910_device &ay5(AY8910(config, "ay5", SOUND_CLOCK/8)); ay5.set_flags(AY8910_DISCRETE_OUTPUT); ay5.set_resistors_load(RES_K(3.3), RES_K(3.3), RES_K(3.3)); ay5.add_route(0, "discrete", 1.0, 12); ay5.add_route(1, "discrete", 1.0, 13); ay5.add_route(2, "discrete", 1.0, 14); DISCRETE(config, m_discrete, gyruss_sound_discrete); m_discrete->add_route(0, "rspeaker", 1.0); m_discrete->add_route(1, "lspeaker", 1.0); }
INPUT_PORTS_END //************************************************************************** // SOUND //************************************************************************** //------------------------------------------------- // DISCRETE_SOUND( vidbrain ) //------------------------------------------------- static const discrete_dac_r1_ladder vidbrain_dac = { 2, { RES_K(120), RES_K(120) }, // R=56K, 2R=120K 0, 0, RES_K(120), 0 }; static DISCRETE_SOUND_START( vidbrain ) DISCRETE_INPUT_DATA(NODE_01) DISCRETE_DAC_R1(NODE_02, NODE_01, DEFAULT_TTL_V_LOGIC_1, &vidbrain_dac) DISCRETE_OUTPUT(NODE_02, 5000) DISCRETE_SOUND_END //************************************************************************** // DEVICE CONFIGURATION //**************************************************************************
/************************************************/ /* Note sound is created by a divider circuit. */ /* The master clock is the 93681.5 Hz, from the */ /* 555 oscillator. This is then sent to a */ /* preloadable 8 bit counter, which loads the */ /* value from OUT02 when overflowing from 0xFF */ /* to 0x00. Therefore it divides by 2 (OUT02 */ /* = FE) to 256 (OUT02 = 00). */ /* There is also a final /2 stage. */ /* Note that there is no music disable line. */ /* When there is no music, the game sets the */ /* oscillator to 0Hz. (OUT02 = FF) */ /************************************************/ DISCRETE_NOTE(BLOCKADE_NOTE, 1, 93681.5, BLOCKADE_NOTE_DATA, 255, 1, DISC_CLK_IS_FREQ | DISC_OUT_IS_ENERGY) DISCRETE_CRFILTER(NODE_10, BLOCKADE_NOTE, RES_K(35), CAP_U(.01)) DISCRETE_OUTPUT(NODE_10, 7500) DISCRETE_SOUND_END WRITE8_MEMBER(blockade_state::blockade_sound_freq_w) { m_discrete->write(space,BLOCKADE_NOTE_DATA, data); return; } WRITE8_MEMBER(blockade_state::blockade_env_on_w) { if (BLOCKADE_LOG) mame_printf_debug("Boom Start\n"); m_samples->start(0,0); return;
{ 0, 1, 2, 3 }, /* the bitplanes are packed */ { 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4, 8*4, 9*4, 10*4, 11*4, 12*4, 13*4, 14*4, 15*4 }, { 0*4*16, 1*4*16, 2*4*16, 3*4*16, 4*4*16, 5*4*16, 6*4*16, 7*4*16, 8*4*16, 9*4*16, 10*4*16, 11*4*16, 12*4*16, 13*4*16, 14*4*16, 15*4*16 }, 32*4*8 /* every sprite takes 128 consecutive bytes */ }; static GFXDECODE_START( circusc ) GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 ) GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 16*16, 16 ) GFXDECODE_END static const discrete_mixer_desc circusc_mixer_desc = {DISC_MIXER_IS_RESISTOR, {RES_K(2.2), RES_K(2.2), RES_K(10)}, {0,0,0}, // no variable resistors {0,0,0}, // no node capacitors 0, RES_K(1), CAP_U(0.1), CAP_U(0.47), 0, 1}; static DISCRETE_SOUND_START( circusc ) DISCRETE_INPUTX_STREAM(NODE_01, 0, 1.0, 0) DISCRETE_INPUTX_STREAM(NODE_02, 1, 1.0, 0) DISCRETE_INPUTX_STREAM(NODE_03, 2, 2.0, 0) // DAC 0..32767, multiply by 2 DISCRETE_INPUT_DATA(NODE_05) DISCRETE_INPUT_DATA(NODE_06)
0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, }; static struct DACinterface n8080_dac_interface = { 1, { 30 } }; struct SN76477interface sheriff_sn76477_interface = { 1, { 35 }, { RES_K(36) }, /* 04 */ { RES_K(100) }, /* 05 */ { CAP_N(1) }, /* 06 */ { RES_K(620) }, /* 07 */ { CAP_U(1) }, /* 08 */ { RES_K(20) }, /* 10 */ { RES_K(150) }, /* 11 */ { RES_K(47) }, /* 12 */ { 0 }, /* 16 */ { CAP_N(1) }, /* 17 */ { RES_M(1.5) }, /* 18 */ { 0 }, /* 19 */ { RES_M(1.5) }, /* 20 */ { CAP_N(47) }, /* 21 */ { CAP_N(47) }, /* 23 */ { RES_K(560) }, /* 24 */
/* Nodes - Inputs */ #define CIRCUS_MUSIC_BIT NODE_01 /* Nodes - Sounds */ #define CIRCUS_MUSIC_SND NODE_10 DISCRETE_SOUND_START(circus) /************************************************/ /* Input register mapping for circus */ /************************************************/ DISCRETE_INPUTX_NOT(CIRCUS_MUSIC_BIT, 20000, 0, 1) /************************************************/ /* Music is just a 1 bit DAC */ /************************************************/ DISCRETE_CRFILTER(CIRCUS_MUSIC_SND, CIRCUS_MUSIC_BIT, RES_K(50), CAP_U(.1)) /* 50K is just an average value */ DISCRETE_OUTPUT(CIRCUS_MUSIC_SND, 1) DISCRETE_SOUND_END static const discrete_mixer_desc crash_mixer = { DISC_MIXER_IS_RESISTOR, {RES_K(22), RES_K(5)}, {0}, {CAP_U(.1), CAP_U(.1)}, 0, RES_K(100), 0, CAP_U(.1), 0, 10000 }; static const discrete_555_desc crash_beeper_555m = {
PARAM(Solver.DYNAMIC_TS, 1) PARAM(Solver.LTE, 1e-1) #endif //FIXME proper models! NET_MODEL(".model 2SC945 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ikf=20m Xtb=1.5 Br=3.377 Rc=1 Cjc=1p Mjc=.3333 Vjc=.75 Fc=.5 Cje=25p Mje=.3333 Vje=.75 Tr=450n Tf=20n Itf=0 Vtf=0 Xtf=0 VCEO=45V ICrating=150M MFG=Toshiba)") NET_MODEL(".model 1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)") //NET_C(R44.1, XU1.7) /* * Workaround: The simplified opamp model does not correctly * model the internals of the inputs. */ ANALOG_INPUT(VWORKAROUND, 2.061) RES(RWORKAROUND, RES_K(27)) NET_C(VWORKAROUND.Q, RWORKAROUND.1) NET_C(XU1.6, RWORKAROUND.2) ANALOG_INPUT(I_V5, 5) //ANALOG_INPUT(I_V0, 0) ALIAS(I_V0.Q, GND) #if 0 ANALOG_INPUT(I_SD0, 0) ANALOG_INPUT(I_BD0, 0) ANALOG_INPUT(I_CH0, 0) ANALOG_INPUT(I_OH0, 0) ANALOG_INPUT(I_SOUNDIC0, 0) ANALOG_INPUT(I_OKI0, 0) ANALOG_INPUT(I_SOUND0, 0) ANALOG_INPUT(I_SINH0, 0)
0, /* Output is not inverted */ 15 /* Output bit */ }; static const discrete_555_desc starshp1_556_c10 = { DISC_555_OUT_ENERGY, 5, /* B+ voltage of 555 */ DEFAULT_555_VALUES }; /* effect of 556 internal CV resistors at pin 3 */ static const discrete_mixer_desc starshp1_556_c10_cv = { DISC_MIXER_IS_RESISTOR, {STARSHP1_R61, RES_K(5)}, {0}, {0}, 0, RES_K(10), 0, 0, 0, 1 }; static const discrete_mixer_desc starshp1_566_a9_mix_r = { DISC_MIXER_IS_RESISTOR, {STARSHP1_R54, STARSHP1_R55}, {0}, {0}, 0, 0, 0, 0, 0, 1 }; static const discrete_mixer_desc starshp1_555_b10_mix_r = { DISC_MIXER_IS_RESISTOR, {STARSHP1_R65, STARSHP1_R68}, {0}, {0}, 0, 0, 0, 0, 0, 1
{0,0,0,0}, /* no node capacitors */ 0, 0, DK_C29, 0, 0, 1 }; #endif static const discrete_mixer_desc dkong_mixer_desc = { DISC_MIXER_IS_RESISTOR, {DK_R2, DK_R24, DK_R1, DK_R14}, {0,0,0}, /* no variable resistors */ {0,0,0}, /* no node capacitors */ #if DK_REVIEW 0, RES_K(10), #else 0, 0, #endif DK_C159, DK_C12, 0, 1 }; /* There is no load on the output for the jump circuit * For the walk circuit, the voltage does not matter */ static const discrete_555_desc dkong_555_vco_desc = { DISC_555_OUT_ENERGY | DISC_555_OUT_DC, DK_SUP_V,
GFXDECODE_END /* Machine Initialization */ /* Machine Driver */ static MACHINE_CONFIG_START( nitedrvr, nitedrvr_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6502, XTAL_12_096MHz/12) // 1 MHz MCFG_CPU_PROGRAM_MAP(nitedrvr_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", nitedrvr_state, irq0_line_hold) MCFG_WATCHDOG_VBLANK_INIT(3) MCFG_TIMER_DRIVER_ADD_PERIODIC("crash_timer", nitedrvr_state, nitedrvr_crash_toggle_callback, PERIOD_OF_555_ASTABLE(RES_K(180), 330, CAP_U(1))) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(57) // how is this derived? MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) MCFG_SCREEN_SIZE(32*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) MCFG_SCREEN_UPDATE_DRIVER(nitedrvr_state, screen_update_nitedrvr) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", nitedrvr) MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette") /* sound hardware */
DISC_CLK_IS_FREQ, 16, /* Bit Length */ 0, /* Reset Value */ 10, /* Use Bit 10 as F0 input 0 */ 15, /* Use Bit 15 as F0 input 1 */ DISC_LFSR_XOR, /* F0 is XOR */ DISC_LFSR_XOR, /* F1 is F0 XOR with external feed. External feed is (address line) A2 */ DISC_LFSR_REPLACE, /* F2 replaces the shifted register contents */ 0x000001, /* Everything is shifted into the first bit only */ 1, /* Output is inverted by Q20 */ 12 /* Output bit */ }; const struct discrete_integrate_info tank8_op1_integrate_info = { DISC_INTEGRATE_OP_AMP_1, RES_K(27), /* R98 */ RES_K(2.2), /* R97 */ RES_K(47), /* R96 */ CAP_U(0.22), /* C60 */ 5, 12, /* B+ is 12V, not 15V shown in the schematic. */ 0, 0, 0, }; const struct discrete_integrate_info tank8_op2_integrate_info = { DISC_INTEGRATE_OP_AMP_1, RES_K(27), /* R99 */ RES_K(2.2), /* R97 */ RES_K(47), /* R96 */
if (state->m_sprite_enable) drawgfx_transpen(bitmap,cliprect,screen->machine().gfx[1], state->m_sprite_code, state->m_sprite_color, 0,0, state->m_sprite_x - 6,state->m_sprite_y,0); return 0; } /* Laser Battle sound **********************************/ static const sn76477_interface laserbat_sn76477_interface = { RES_K(47), /* 4 noise_res R21 47K */ 0, /* 5 filter_res (variable) */ CAP_P(1000), /* 6 filter_cap C21 1000 pF */ 0, /* 7 decay_res */ 0, /* 8 attack_decay_cap */ 0, /* 10 attack_res */ RES_K(47), /* 11 amplitude_res R26 47K */ 0, /* 12 feedback_res (variable) */ 5.0 * RES_K(2.2) / (RES_K(2.2) + RES_K(4.7)), /* 16 vco_voltage */ 0, /* 17 vco_cap */ 0, /* 18 vco_res (variable) */ 5.0, /* 19 pitch_voltage */ 0, /* 20 slf_res (variable) */ CAP_U(4.7), /* 21 slf_cap C24 4.7 uF */ 0, /* 23 oneshot_cap */ 0, /* 24 oneshot_res */
32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 }, 64*8 /* every sprite takes 64 consecutive bytes */ }; static GFXDECODE_START( gyruss ) GFXDECODE_ENTRY( "gfx1", 0x0000, spritelayout, 0, 16 ) /* upper half */ GFXDECODE_ENTRY( "gfx1", 0x0010, spritelayout, 0, 16 ) /* lower half */ GFXDECODE_ENTRY( "gfx2", 0x0000, charlayout, 16*16, 16 ) GFXDECODE_END static const ay8910_interface ay8910_interface_1 = { AY8910_DISCRETE_OUTPUT, { RES_K(3.3), RES_K(3.3), RES_K(3.3) }, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_DRIVER_MEMBER(gyruss_state,gyruss_filter0_w) }; static const ay8910_interface ay8910_interface_2 = { AY8910_DISCRETE_OUTPUT, { RES_K(3.3), RES_K(3.3), RES_K(3.3) }, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_DRIVER_MEMBER(gyruss_state,gyruss_filter1_w) };
m_maincpu->set_input_line(0, !data ? CLEAR_LINE : ASSERT_LINE); } WRITE8_MEMBER(m10_state::ic8j2_output_changed) { /* written from /Q to A with slight delight */ LOG(("ic8j2: %d\n", data)); ttl74123_a_w(m_ic8j2, space, 0, data); ttl74123_a_w(m_ic8j1, space, 0, data); } static const ttl74123_interface ic8j1_intf = { /* completely illegible */ TTL74123_NOT_GROUNDED_DIODE, /* the hook up type */ RES_K(1), /* resistor connected to RCext */ CAP_U(1), /* capacitor connected to Cext and RCext */ 1, /* A pin - driven by the CRTC */ 1, /* B pin - pulled high */ 1, /* Clear pin - pulled high */ DEVCB_DRIVER_MEMBER(m10_state,ic8j1_output_changed) }; static const ttl74123_interface ic8j2_intf = { TTL74123_NOT_GROUNDED_DIODE, /* the hook up type */ /* 10k + 20k variable resistor */ RES_K(22), /* resistor connected to RCext */ CAP_U(2.2), /* capacitor connected to Cext and RCext */ 1, /* A pin - driven by the CRTC */ 1, /* B pin - pulled high */
#define SPIDERS_SOUND_CLK 6000000 /* 6 MHZ*/ /************************************************************************/ /* Spiders Sound System Analog emulation */ /* Written by Hans Andersson, Aug 2005 */ /* Schematics by Don Maeby */ /* */ /* Todo - Add proper sound mixer */ /************************************************************************/ static const discrete_dac_r1_ladder spiders_sound_dac = { 4, // size of ladder {RES_K(68), RES_K(47), RES_K(33), RES_K(33)}, // R21, R31, R30, R50 DEFAULT_TTL_V_LOGIC_1, 0, // no rBias 0, // no rGnd 0 // no cap }; /* The noice generator consists of two LS164 plus a LS74, so the lenght is 8+8+1 */ static const discrete_lfsr_desc spiders_lfsr = { DISC_CLK_IS_FREQ, 17, /* Bit Length */ 0, /* Reset Value */ 4, /* Use Bit 4 (QE of first LS164) as F0 input 0 */ 16, /* Use Bit 16 (LS74) as F0 input 1 */ DISC_LFSR_XOR_INV_IN1,/* F0 is XOR with input 1 inverted */
{ 0, 1, 2, 3, 8*8, 8*8+1, 8*8+2, 8*8+3 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 }, 64*8 /* every sprite takes 64 consecutive bytes */ }; static GFXDECODE_START( gyruss ) GFXDECODE_ENTRY( "gfx1", 0x0000, spritelayout, 0, 16 ) /* upper half */ GFXDECODE_ENTRY( "gfx1", 0x0010, spritelayout, 0, 16 ) /* lower half */ GFXDECODE_ENTRY( "gfx2", 0x0000, charlayout, 16*16, 16 ) GFXDECODE_END static const discrete_mixer_desc konami_right_mixer_desc = {DISC_MIXER_IS_RESISTOR, {RES_K(2.2), RES_K(2.2), RES_K(2.2), RES_K(3.3)/3, RES_K(3.3)/3 }, {0,0,0,0,0,0}, /* no variable resistors */ {0,0,0,0,0,0}, /* no node capacitors */ 0, 200, CAP_U(0.1), CAP_U(1), /* DC - Removal, not in schematics */ 0, 1}; static const discrete_mixer_desc konami_left_mixer_desc = {DISC_MIXER_IS_RESISTOR, {RES_K(2.2), RES_K(2.2), RES_K(2.2), RES_K(3.3)/3, RES_K(4.7) }, {0,0,0,0,0,0}, /* no variable resistors */ {0,0,0,0,0,0}, /* no node capacitors */ 0, 200, CAP_U(0.1), CAP_U(1), /* DC - Removal, not in schematics */
MCFG_CPU_IO_MAP(rotaryf_io_map) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", rotaryf_state, rotaryf_interrupt, "screen", 0, 1) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_SIZE(32*8, 262) /* vert size is a guess, taken from mw8080bw */ MCFG_SCREEN_VISIBLE_AREA(1*8, 30*8-1, 0*8, 32*8-1) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_UPDATE_DRIVER(rotaryf_state, screen_update) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("snsnd", SN76477, 0) MCFG_SN76477_NOISE_PARAMS(0, 0, 0) // noise + filter: N/C MCFG_SN76477_DECAY_RES(0) // decay_res: N/C MCFG_SN76477_ATTACK_PARAMS(0, RES_K(100)) // attack_decay_cap + attack_res MCFG_SN76477_AMP_RES(RES_K(56)) // amplitude_res MCFG_SN76477_FEEDBACK_RES(RES_K(10)) // feedback_res MCFG_SN76477_VCO_PARAMS(0, CAP_U(0.1), RES_K(8.2)) // VCO volt + cap + res MCFG_SN76477_PITCH_VOLTAGE(5.0) // pitch_voltage MCFG_SN76477_SLF_PARAMS(CAP_U(1.0), RES_K(120)) // slf caps + res MCFG_SN76477_ONESHOT_PARAMS(0, 0) // oneshot caps + res: N/C MCFG_SN76477_VCO_MODE(1) // VCO mode MCFG_SN76477_MIXER_PARAMS(0, 0, 0) // mixer A, B, C MCFG_SN76477_ENVELOPE_PARAMS(1, 0) // envelope 1, 2 MCFG_SN76477_ENABLE(1) // enable MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) MCFG_SOUND_ADD("samples", SAMPLES, 0) MCFG_SAMPLES_CHANNELS(6) MCFG_SAMPLES_NAMES(rotaryf_sample_names)
MCFG_SCREEN_VISIBLE_AREA(MIN_X, MAX_X, MIN_Y, MAX_Y) MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_60HZ) MCFG_SCREEN_SIZE(HWIDTH*8, TOTAL_LINES_60HZ) MCFG_SCREEN_UPDATE_DEVICE("antic", antic_device, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_PALETTE_ADD("palette", 256) MCFG_PALETTE_INIT_OWNER(atari_common_state, atari) MCFG_DEFAULT_LAYOUT(layout_maxaflex) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("pokey", POKEY, FREQ_17_EXACT) MCFG_POKEY_INTERRUPT_CB(atari_common_state, interrupt_cb) MCFG_POKEY_OUTPUT_RC(RES_K(1), CAP_U(0.0), 5.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END ROM_START(maxaflex) ROM_REGION(0x10000,"maincpu",0) /* 64K for the CPU */ ROM_LOAD("atarixl.rom", 0xc000, 0x4000, CRC(1f9cd270) SHA1(ae4f523ba08b6fd59f3cae515a2b2410bbd98f55)) ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller */ ROM_LOAD("maxaflex.uc", 0x0000, 0x0800, CRC(fe9cf53c) SHA1(4b02bc2f0c8a1eab799814fac82d5812c0160206))
else if (m_out_offs < 0x77) { if (m_p_ram[m_out_offs]) m_samples->start(1, 0); // bumpers } else m_out_offs = 0xff; } static const sn76477_interface sn76477_intf = { RES_M(1000), /* 4 noise_res */ RES_M(1000), /* 5 filter_res */ CAP_N(0), /* 6 filter_cap */ RES_K(470), /* 7 decay_res */ CAP_N(1), /* 8 attack_decay_cap */ RES_K(22), /* 10 attack_res */ RES_K(100), /* 11 amplitude_res */ RES_K(52), /* 12 feedback_res */ 5.0, /* 16 vco_voltage */ CAP_U(0.01), /* 17 vco_cap */ RES_K(390), /* 18 vco_res */ 0.0, /* 19 pitch_voltage */ RES_M(1), /* 20 slf_res */ CAP_U(0.1), /* 21 slf_cap */ CAP_U(0.47), /* 23 oneshot_cap */ RES_K(470), /* 24 oneshot_res */ 0, /* 22 vco (variable) */ 0, /* 26 mixer A (grounded) */ 0, /* 25 mixer B (variable) */
/************************************* * * Machine driver * *************************************/ MACHINE_CONFIG_FRAGMENT( jedi_audio ) MCFG_CPU_ADD("audiocpu", M6502, JEDI_AUDIO_CPU_CLOCK) MCFG_CPU_PROGRAM_MAP(audio_map) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SOUND_ADD("pokey1", POKEY, JEDI_POKEY_CLOCK) MCFG_POKEY_OUTPUT_OPAMP(RES_K(1), 0.0, 5.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.30) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.30) MCFG_SOUND_ADD("pokey2", POKEY, JEDI_POKEY_CLOCK) MCFG_POKEY_OUTPUT_OPAMP(RES_K(1), 0.0, 5.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.30) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.30) MCFG_SOUND_ADD("pokey3", POKEY, JEDI_POKEY_CLOCK) MCFG_POKEY_OUTPUT_OPAMP(RES_K(1), 0.0, 5.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.30) MCFG_SOUND_ADD("pokey4", POKEY, JEDI_POKEY_CLOCK) MCFG_POKEY_OUTPUT_OPAMP(RES_K(1), 0.0, 5.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.30)
CAP(C2, CAP_U(0.1)) QBJT_SW(Q11, "2N3644") NET_C(D2.A, R8.1, Q10.C) ALIAS(COIN_Q, D2.K) NET_C(R8.2, R7.2, C2.2, Q11.B) NET_C(R7.1, C2.1, Q11.E, V5) NET_C(R9.2, Q11.C) TTL_7486_XOR(C8_4, Q11.C, P) ALIAS(QQ, C8_4.Q) /* Start buttons, etc. */ SWITCH(START1) RES(R11, RES_K(1)) NET_C(START1.2, GND) NET_C(R11.1, V5) NET_C(START1.1, R11.2) TTL_7410_NAND(H9_1, 2_PLAYER_CREDIT, START, R11.2) SWITCH(START2) RES(R12, RES_K(1)) NET_C(START2.2, GND) NET_C(R12.1, V5) NET_C(START2.1, R12.2) TTL_7410_NAND(H9_2, H9_1.Q, START, R12.2) TTL_7400_NAND(J8_2, FREE_COIN_Q, H8_2.QQ) TTL_74107(J9_2, 64V, J8_2.Q, J9_1.QQ, J8_2.Q) TTL_7450_ANDORINVERT(K9_2, creditsw.Q, K8_5.Q, FREE_COIN, 2_PLAYER_MODE_Q)