void enmirage_state::mirage(machine_config &config) { MC6809E(config, m_maincpu, 2000000); m_maincpu->set_addrmap(AS_PROGRAM, &enmirage_state::mirage_map); config.set_default_layout(layout_mirage); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); es5503_device &es5503(ES5503(config, "es5503", 7000000)); es5503.set_channels(2); es5503.irq_func().set(FUNC(enmirage_state::mirage_doc_irq)); es5503.adc_func().set(FUNC(enmirage_state::mirage_adc_read)); es5503.add_route(0, "lspeaker", 1.0); es5503.add_route(1, "rspeaker", 1.0); VIA6522(config, m_via, 1000000); m_via->writepa_handler().set(FUNC(enmirage_state::mirage_via_write_porta)); m_via->writepb_handler().set(FUNC(enmirage_state::mirage_via_write_portb)); m_via->irq_handler().set_inputline(m_maincpu, M6809_IRQ_LINE); acia6850_device &acia6850(ACIA6850(config, "acia6850", 0)); acia6850.irq_handler().set_inputline(m_maincpu, M6809_FIRQ_LINE); WD1772(config, m_fdc, 8000000); m_fdc->intrq_wr_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); m_fdc->drq_wr_callback().set_inputline(m_maincpu, M6809_IRQ_LINE); FLOPPY_CONNECTOR(config, "wd1772:0", ensoniq_floppies, "35dd", enmirage_state::floppy_formats); }
void tutankhm_state::tutankhm(machine_config &config) { /* basic machine hardware */ MC6809E(config, m_maincpu, XTAL(18'432'000)/12); /* 1.5 MHz ??? */ m_maincpu->set_addrmap(AS_PROGRAM, &tutankhm_state::main_map); ls259_device &mainlatch(LS259(config, "mainlatch")); // C3 mainlatch.q_out_cb<0>().set(FUNC(tutankhm_state::irq_enable_w)); mainlatch.q_out_cb<1>().set_nop(); // PAY OUT - not used mainlatch.q_out_cb<2>().set(FUNC(tutankhm_state::coin_counter_2_w)); mainlatch.q_out_cb<3>().set(FUNC(tutankhm_state::coin_counter_1_w)); mainlatch.q_out_cb<4>().set(FUNC(tutankhm_state::galaxian_stars_enable_w)); mainlatch.q_out_cb<5>().set("timeplt_audio", FUNC(timeplt_audio_device::mute_w)); mainlatch.q_out_cb<6>().set(FUNC(tutankhm_state::flip_screen_x_w)); mainlatch.q_out_cb<7>().set(FUNC(tutankhm_state::flip_screen_y_w)); WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(GALAXIAN_PIXEL_CLOCK, GALAXIAN_HTOTAL, GALAXIAN_HBEND, GALAXIAN_HBSTART, GALAXIAN_VTOTAL, GALAXIAN_VBEND, GALAXIAN_VBSTART); PALETTE(config, m_palette).set_format(1, tutankhm_state::raw_to_rgb_func, 16); m_screen->set_screen_update(FUNC(tutankhm_state::screen_update_tutankhm)); m_screen->screen_vblank().set(FUNC(tutankhm_state::vblank_irq)); /* sound hardware */ TIMEPLT_AUDIO(config, "timeplt_audio"); /* blinking frequency is determined by 555 counter with Ra=100k, Rb=10k, C=10uF */ TIMER(config, "stars").configure_periodic(FUNC(tutankhm_state::scramble_stars_blink_timer), PERIOD_OF_555_ASTABLE(100000, 10000, 0.00001)); }
void xain_state::xsleena(machine_config &config) { // basic machine hardware MC6809E(config, m_maincpu, CPU_CLOCK); // 68B09E m_maincpu->set_addrmap(AS_PROGRAM, &xain_state::main_map); TIMER(config, "scantimer").configure_scanline(FUNC(xain_state::scanline), "screen", 0, 1); MC6809E(config, m_subcpu, CPU_CLOCK); // 68B09E m_subcpu->set_addrmap(AS_PROGRAM, &xain_state::cpu_map_B); MC6809(config, m_audiocpu, PIXEL_CLOCK); // 68A09 m_audiocpu->set_addrmap(AS_PROGRAM, &xain_state::sound_map); TAITO68705_MCU(config, m_mcu, MCU_CLOCK); config.m_perfect_cpu_quantum = subtag("maincpu"); // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(PIXEL_CLOCK, 384, 0, 256, 272, 8, 248); // based on ddragon driver m_screen->set_screen_update(FUNC(xain_state::screen_update)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_xain); PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 512); /* sound hardware */ SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch).data_pending_callback().set_inputline(m_audiocpu, M6809_IRQ_LINE); ym2203_device &ym1(YM2203(config, "ym1", MCU_CLOCK)); ym1.irq_handler().set_inputline(m_audiocpu, M6809_FIRQ_LINE); ym1.add_route(0, "mono", 0.50); ym1.add_route(1, "mono", 0.50); ym1.add_route(2, "mono", 0.50); ym1.add_route(3, "mono", 0.40); ym2203_device &ym2(YM2203(config, "ym2", MCU_CLOCK)); ym2.add_route(0, "mono", 0.50); ym2.add_route(1, "mono", 0.50); ym2.add_route(2, "mono", 0.50); ym2.add_route(3, "mono", 0.40); }
void icecold_state::icecold(machine_config &config) { /* basic machine hardware */ MC6809E(config, m_maincpu, XTAL(6'000'000)/4); // 68A09E m_maincpu->set_addrmap(AS_PROGRAM, &icecold_state::icecold_map); pia6821_device &pia0(PIA6821(config, "pia0", 0)); pia0.readpa_handler().set_ioport("JOY"); pia0.readpb_handler().set_ioport("DSW3"); pia0.irqa_handler().set_inputline("maincpu", M6809_IRQ_LINE); pia0.irqb_handler().set_inputline("maincpu", M6809_IRQ_LINE); PIA6821(config, m_pia1, 0); m_pia1->readpa_handler().set(FUNC(icecold_state::ay_r)); m_pia1->writepa_handler().set(FUNC(icecold_state::ay_w)); m_pia1->writepb_handler().set(FUNC(icecold_state::snd_ctrl_w)); m_pia1->irqa_handler().set_inputline("maincpu", M6809_FIRQ_LINE); m_pia1->irqb_handler().set_inputline("maincpu", M6809_FIRQ_LINE); pia6821_device &pia2(PIA6821(config, "pia2", 0)); pia2.irqa_handler().set_inputline("maincpu", M6809_IRQ_LINE); pia2.irqb_handler().set_inputline("maincpu", M6809_IRQ_LINE); i8279_device &kbdc(I8279(config, "i8279", XTAL(6'000'000)/4)); kbdc.out_irq_callback().set("pia0", FUNC(pia6821_device::cb1_w)); // irq kbdc.out_sl_callback().set(FUNC(icecold_state::scanlines_w)); // scan SL lines kbdc.out_disp_callback().set(FUNC(icecold_state::digit_w)); // display A&B kbdc.in_rl_callback().set(FUNC(icecold_state::kbd_r)); // kbd RL lines // 30Hz signal from CH-C of ay0 TIMER(config, "sint_timer", 0).configure_periodic(timer_device::expired_delegate(FUNC(icecold_state::icecold_sint_timer), this), attotime::from_hz(30)); // for update motors position TIMER(config, "motors_timer", 0).configure_periodic(timer_device::expired_delegate(FUNC(icecold_state::icecold_motors_timer), this), attotime::from_msec(50)); // video hardware config.set_default_layout(layout_icecold); // sound hardware SPEAKER(config, "mono").front_center(); AY8910(config, m_ay8910[0], XTAL(6'000'000)/4); m_ay8910[0]->port_a_read_callback().set_ioport("DSW4"); m_ay8910[0]->port_b_write_callback().set(FUNC(icecold_state::ay8910_0_b_w)); m_ay8910[0]->add_route(ALL_OUTPUTS, "mono", 0.25); AY8910(config, m_ay8910[1], XTAL(6'000'000)/4); m_ay8910[1]->port_a_write_callback().set(FUNC(icecold_state::ay8910_1_a_w)); m_ay8910[1]->port_b_write_callback().set(FUNC(icecold_state::ay8910_1_b_w)); m_ay8910[1]->add_route(ALL_OUTPUTS, "mono", 0.25); }
void wpcsnd_device::device_add_mconfig(machine_config &config) { MC6809E(config, m_cpu, XTAL(8'000'000) / 4); // MC68B09E m_cpu->set_addrmap(AS_PROGRAM, &wpcsnd_device::wpcsnd_map); config.m_minimum_quantum = attotime::from_hz(50); YM2151(config, m_ym2151, 3580000); m_ym2151->irq_handler().set(FUNC(wpcsnd_device::ym2151_irq_w)); m_ym2151->add_route(ALL_OUTPUTS, *this, 0.25); AD7524(config, "dac", 0).add_route(ALL_OUTPUTS, *this, 0.25); voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.set_output(5.0); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); HC55516(config, m_hc55516, 0).add_route(ALL_OUTPUTS, *this, 0.5); }
void contra_state::contra(machine_config &config) { /* basic machine hardware */ HD6309E(config, m_maincpu, XTAL(24'000'000) / 8); /* 3000000? (HD63C09EP) */ m_maincpu->set_addrmap(AS_PROGRAM, &contra_state::contra_map); m_maincpu->set_vblank_int("screen", FUNC(contra_state::contra_interrupt)); MC6809E(config, m_audiocpu, XTAL(24'000'000)/8); /* 3000000? (HD68B09EP) */ m_audiocpu->set_addrmap(AS_PROGRAM, &contra_state::sound_map); config.m_minimum_quantum = attotime::from_hz(6000); /* enough for the sound CPU to read all commands */ /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); m_screen->set_size(37*8, 32*8); m_screen->set_visarea(0*8, 35*8-1, 2*8, 30*8-1); m_screen->set_screen_update(FUNC(contra_state::screen_update_contra)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_contra); PALETTE(config, m_palette, FUNC(contra_state::contra_palette)); m_palette->set_format(palette_device::xBGR_555, 2 * 8 * 16 * 16); m_palette->set_indirect_entries(128); m_palette->set_endianness(ENDIANNESS_LITTLE); K007121(config, m_k007121_1, 0); m_k007121_1->set_palette_tag(m_palette); K007121(config, m_k007121_2, 0); m_k007121_2->set_palette_tag(m_palette); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); GENERIC_LATCH_8(config, "soundlatch"); YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "lspeaker", 0.60).add_route(1, "rspeaker", 0.60); }
void matmania_state::maniach(machine_config &config) { /* basic machine hardware */ M6502(config, m_maincpu, 1500000); /* 1.5 MHz ???? */ m_maincpu->set_addrmap(AS_PROGRAM, &matmania_state::maniach_map); m_maincpu->set_vblank_int("screen", FUNC(matmania_state::irq0_line_hold)); MC6809E(config, m_audiocpu, 1500000); /* 1.5 MHz ???? (HD68A09EP) */ m_audiocpu->set_addrmap(AS_PROGRAM, &matmania_state::maniach_sound_map); TAITO68705_MCU(config, m_mcu, 1500000*2); /* (don't know really how fast, but it doesn't need to even be this fast) */ config.m_minimum_quantum = attotime::from_hz(6000); /* 100 CPU slice per frame - high interleaving to sync main and mcu */ /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ m_screen->set_size(32*8, 32*8); m_screen->set_visarea(0*8, 32*8-1, 1*8, 31*8-1); m_screen->set_screen_update(FUNC(matmania_state::screen_update_maniach)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_maniach); PALETTE(config, m_palette, FUNC(matmania_state::matmania_palette), 64 + 16); /* sound hardware */ SPEAKER(config, "speaker").front_center(); GENERIC_LATCH_8(config, m_soundlatch); ym3526_device &ymsnd(YM3526(config, "ymsnd", 3600000)); ymsnd.irq_handler().set_inputline(m_audiocpu, M6809_FIRQ_LINE); ymsnd.add_route(ALL_OUTPUTS, "speaker", 1.0); DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.4); // unknown DAC voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); }
void cswat_state::cswat(machine_config &config) { /* basic machine hardware */ MC6809E(config, m_maincpu, XTAL(18'432'000)/3/4); // HD68A09EP, 1.5MHz? m_maincpu->set_addrmap(AS_PROGRAM, &cswat_state::cswat_map); m_maincpu->set_vblank_int("screen", FUNC(cswat_state::irq0_line_assert)); m_maincpu->set_periodic_int(FUNC(cswat_state::nmi_handler), attotime::from_hz(300)); // ? /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); screen.set_size(36*8, 28*8); screen.set_visarea_full(); screen.set_palette("palette"); screen.set_screen_update(FUNC(cswat_state::screen_update_cswat)); GFXDECODE(config, "gfxdecode", "palette", gfx_cswat); PALETTE(config, "palette").set_entries(4*256); /* sound hardware */ // TODO }
/* RS232 usage: mame can09t -window -debug -rs232 terminal */ ACIA6850(config, m_acia, 0); m_acia->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); m_acia->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); rs232.rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd)); rs232.cts_handler().set(m_acia, FUNC(acia6850_device::write_cts)); CLOCK(config, "acia_clock", CAN09T_ACIA_CLOCK).signal_handler().set(FUNC(can09t_state::write_acia_clock)); } #define CAN09_X1_CLOCK 22.1184_MHz_XTAL /* UKI 22118.40 Khz */ #define CAN09_CPU_CLOCK (CAN09_X1_CLOCK / 16) /* ~1.38MHz Divider needs to be check but is the most likelly */ void can09_state::can09(machine_config &config) { MC6809E(config, m_maincpu, CAN09_CPU_CLOCK); // MC68A09EP m_maincpu->set_addrmap(AS_PROGRAM, &can09_state::can09_map); /* RAM banks */ RAM(config, RAM_TAG).set_default_size("768K"); // CRTC init hd6845s_device &crtc(HD6845S(config, "crtc", CAN09_CPU_CLOCK)); // HD46505SP-1 (HD68A45SP) crtc.set_screen("screen"); crtc.set_show_border_area(false); crtc.set_char_width(8); //crtc.set_update_row_callback(FUNC(can09_state::crtc_update_row), this); // not written yet /* Setup loop from data table in ROM: 0xFFCB 0xE020 (CRTC register number), 0xFFD0 0xE021 (CRTC register value) Reg Value Comment 0x00 0x55 Horizontal Total number of characters, 0x01 0x40 Horizontal Displayed number of characters 0x02 0x43 Horizontal Sync Position, character number 0x03 0x03 Horizontal Sync width, number of charcters 0x04 0x50 Vertical Total number of characters 0x05 0x09 Vertical Total Adjust number of characters 0x06 0x48 Vertical Displayed number of characters 0x07 0x4B Vertical Sync Position, character number 0x08 0x00 Interlace Mode/Scew, Non-Interlaced 0x09 0x03 Max Scan Line Address Register 0x0A 0x00 Cursor Start 0x0B 0x0A Cursor End 0x0C 0x00 Start Address hi 0x0D 0x00 Start Address lo 0x0E 0x00 Cursor hi 0x0F 0x00 Cursor lo Note - no init of Light Pen registers */ /* screen - totally faked value for now */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(50); screen.set_raw(4_MHz_XTAL / 2, 512, 0, 512, 576, 0, 576); screen.set_screen_update(FUNC(can09_state::screen_update)); screen.set_palette("palette"); PALETTE(config, "palette", palette_device::MONOCHROME); /* Floppy */ WD1770(config, "wd1770", 8_MHz_XTAL); // TODO: Verify 8MHz UKI crystal assumed to be used #if 0 FLOPPY_CONNECTOR(config, "wd1770:0", candela_floppies, "3dd", floppy_image_device::default_floppy_formats); SOFTWARE_LIST(config, "flop3_list").set_original("candela"); #endif /* --PIA inits----------------------- */ PIA6821(config, m_pia1, 0); // CPU board m_pia1->readpa_handler().set(FUNC(can09_state::pia1_A_r)); m_pia1->writepa_handler().set(FUNC(can09_state::pia1_A_w)); m_pia1->readpb_handler().set(FUNC(can09_state::pia1_B_r)); m_pia1->writepb_handler().set(FUNC(can09_state::pia1_B_w)); m_pia1->cb2_handler().set(FUNC(can09_state::pia1_cb2_w)); /* 0xFF7D 0xE035 (PIA1 Control A) = 0x00 - Channel A IRQ disabled */ /* 0xFF81 0xE037 (PIA1 Control B) = 0x00 - Channel A IRQ disabled */ /* 0xFF85 0xE034 (PIA1 DDR A) = 0x1F - Port A mixed mode */ /* 0xFF89 0xE036 (PIA1 DDR B) = 0x79 - Port B mixed mode */ /* 0xFF8D 0xE035 (PIA1 Control A) = 0x04 - Channel A lock DDR */ /* 0xFF8F 0xE037 (PIA1 Control B) = 0x04 - Channel B lock DDR */ /* 0xFF93 0xE034 (PIA1 Port B) = 0x18 - Write Data on Port B */ #if 1 PIA6821(config, PIA2_TAG, 0); // CPU board ACIA6850(config, "acia1", 0); // CPU board ACIA6850(config, "acia2", 0); // CPU board #endif }
void sbasketb_state::sbasketbu(machine_config &config) { sbasketb(config); MC6809E(config.replace(), m_maincpu, 1400000); /* 6809E at 1.400 MHz ??? */ m_maincpu->set_addrmap(AS_PROGRAM, &sbasketb_state::sbasketb_map); }
void a2bus_themill_device::device_add_mconfig(machine_config &config) { MC6809E(config, m_6809, 1021800); // 6809E runs at ~1 MHz as per Stellation Two's print ads m_6809->set_addrmap(AS_PROGRAM, &a2bus_themill_device::m6809_mem); }