void selz80_state::selz80(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, XTAL(4'000'000)); // it's actually a 5MHz XTAL with a NEC uPD780C-1 cpu m_maincpu->set_addrmap(AS_PROGRAM, &selz80_state::selz80_mem); m_maincpu->set_addrmap(AS_IO, &selz80_state::selz80_io); MCFG_MACHINE_RESET_OVERRIDE(selz80_state, selz80 ) /* video hardware */ config.set_default_layout(layout_selz80); /* Devices */ CLOCK(config, m_clock, 153600); m_clock->signal_handler().set("uart", FUNC(i8251_device::write_txc)); m_clock->signal_handler().append("uart", FUNC(i8251_device::write_rxc)); i8251_device &uart(I8251(config, "uart", 0)); uart.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); uart.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr)); uart.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr)); rs232.rxd_handler().set("uart", FUNC(i8251_device::write_rxd)); rs232.dsr_handler().set("uart", FUNC(i8251_device::write_dsr)); rs232.cts_handler().set("uart", FUNC(i8251_device::write_cts)); i8279_device &kbdc(I8279(config, "i8279", 5000000 / 2)); // based on divider kbdc.out_sl_callback().set(FUNC(selz80_state::scanlines_w)); // scan SL lines kbdc.out_disp_callback().set(FUNC(selz80_state::digit_w)); // display A&B kbdc.in_rl_callback().set(FUNC(selz80_state::kbd_r)); // kbd RL lines kbdc.in_shift_callback().set_constant(1); // Shift key kbdc.in_ctrl_callback().set_constant(1); }
void z80ne_state::z80ne(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, Z80NE_CPU_SPEED_HZ); m_maincpu->set_addrmap(AS_PROGRAM, &z80ne_state::z80ne_mem); m_maincpu->set_addrmap(AS_IO, &z80ne_state::z80ne_io); MCFG_MACHINE_START_OVERRIDE(z80ne_state,z80ne) MCFG_MACHINE_RESET_OVERRIDE(z80ne_state,z80ne) AY31015(config, m_uart); CLOCK(config, m_uart_clock, 4800); m_uart_clock->signal_handler().set(FUNC(z80ne_state::lx385_uart_tx_clock_w)); m_uart_clock->signal_handler().append(m_uart, FUNC(ay31015_device::write_rcp)); CASSETTE(config, m_cassette1); m_cassette1->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED); m_cassette1->set_interface("z80ne_cass"); CASSETTE(config, m_cassette2); m_cassette2->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED); m_cassette2->set_interface("z80ne_cass"); config.set_default_layout(layout_z80ne); /* internal ram */ RAM(config, m_ram).set_default_size("32K"); // all known tapes require LX.388 expansion //SOFTWARE_LIST(config, "cass_list").set_original("z80ne_cass"); }
void powerbal_state::magicstk(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 12000000); /* 12 MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &powerbal_state::magicstk_main_map); m_maincpu->set_vblank_int("screen", FUNC(powerbal_state::irq2_line_hold)); EEPROM_93C46_16BIT(config, "eeprom").default_value(0); MCFG_MACHINE_START_OVERRIDE(powerbal_state,powerbal) MCFG_MACHINE_RESET_OVERRIDE(powerbal_state,powerbal) /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(61); screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); screen.set_size(128*8, 64*8); screen.set_visarea(0*8, 40*8-1, 0*8, 30*8-1); screen.set_screen_update(FUNC(powerbal_state::screen_update_powerbal)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_powerbal); PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 512); MCFG_VIDEO_START_OVERRIDE(powerbal_state,powerbal) /* sound hardware */ SPEAKER(config, "mono").front_center(); OKIM6295(config, m_oki, 1000000, okim6295_device::PIN7_HIGH); m_oki->add_route(ALL_OUTPUTS, "mono", 1.0); m_oki->set_addrmap(0, &powerbal_state::oki_map); }
void gberet_state::gberetb(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, XTAL(20'000'000)/4); // divider guessed m_maincpu->set_addrmap(AS_PROGRAM, &gberet_state::gberetb_map); m_maincpu->set_vblank_int("screen", FUNC(gberet_state::irq0_line_assert)); m_maincpu->set_periodic_int(FUNC(gberet_state::nmi_line_assert), attotime::from_hz(XTAL(20'000'000)/0x8000)); // divider guessed MCFG_MACHINE_START_OVERRIDE(gberet_state,gberet) MCFG_MACHINE_RESET_OVERRIDE(gberet_state,gberet) /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(32*8, 32*8); screen.set_visarea(1*8, 31*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(gberet_state::screen_update_gberetb)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_gberetb); PALETTE(config, m_palette, FUNC(gberet_state::gberet_palette), 2*16*16, 32); MCFG_VIDEO_START_OVERRIDE(gberet_state,gberet) /* sound hardware */ SPEAKER(config, "mono").front_center(); SN76489A(config, m_sn, XTAL(20'000'000)/12).add_route(ALL_OUTPUTS, "mono", 1.0); // divider guessed }
void gberet_state::gberet(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, XTAL(18'432'000)/6); // X1S (generated by a custom IC) m_maincpu->set_addrmap(AS_PROGRAM, &gberet_state::gberet_map); TIMER(config, "scantimer").configure_scanline(FUNC(gberet_state::gberet_interrupt_tick), "screen", 0, 16); WATCHDOG_TIMER(config, "watchdog"); MCFG_MACHINE_START_OVERRIDE(gberet_state,gberet) MCFG_MACHINE_RESET_OVERRIDE(gberet_state,gberet) /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60.60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(32*8, 32*8); screen.set_visarea(1*8, 31*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(gberet_state::screen_update_gberet)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_gberet); PALETTE(config, m_palette, FUNC(gberet_state::gberet_palette), 2*16*16, 32); MCFG_VIDEO_START_OVERRIDE(gberet_state,gberet) /* sound hardware */ SPEAKER(config, "mono").front_center(); SN76489A(config, m_sn, XTAL(18'432'000)/12).add_route(ALL_OUTPUTS, "mono", 1.0); /* type verified on real and bootleg pcb */ }
void speglsht_state::speglsht(machine_config &config) { /* basic machine hardware */ ST0016_CPU(config, m_maincpu, 8000000); /* 8 MHz ? */ m_maincpu->set_addrmap(AS_PROGRAM, &speglsht_state::st0016_mem); m_maincpu->set_addrmap(AS_IO, &speglsht_state::st0016_io); m_maincpu->set_vblank_int("screen", FUNC(speglsht_state::irq0_line_hold)); R3051(config, m_subcpu, 25000000); m_subcpu->set_endianness(ENDIANNESS_LITTLE); m_subcpu->set_addrmap(AS_PROGRAM, &speglsht_state::speglsht_mem); m_subcpu->set_vblank_int("screen", FUNC(speglsht_state::irq4_line_assert)); config.m_minimum_quantum = attotime::from_hz(6000); MCFG_MACHINE_RESET_OVERRIDE(speglsht_state,speglsht) /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(512, 512); screen.set_visarea(0, 319, 8, 239-8); screen.set_screen_update(FUNC(speglsht_state::screen_update_speglsht)); GFXDECODE(config, "gfxdecode", m_palette, gfx_speglsht); PALETTE(config, m_palette).set_entries(16*16*4+1); MCFG_VIDEO_START_OVERRIDE(speglsht_state,speglsht) }
void hec2hrp_state::hec2mdhrx(machine_config &config) { Z80(config, m_maincpu, 5_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &hec2hrp_state::hec2hrx_mem); m_maincpu->set_addrmap(AS_IO, &hec2hrp_state::hec2mdhrx_io); m_maincpu->set_periodic_int(FUNC(hec2hrp_state::irq0_line_hold), attotime::from_hz(50)); /* put on the Z80 irq in Hz*/ MCFG_MACHINE_RESET_OVERRIDE(hec2hrp_state,hec2mdhrx) MCFG_MACHINE_START_OVERRIDE(hec2hrp_state,hec2mdhrx) /* 3.5" ("mini") disc */ FD1793(config, m_minidisc_fdc, 1_MHz_XTAL); FLOPPY_CONNECTOR(config, "wd179x:0", minidisc_floppies, "dd", hec2hrp_state::minidisc_formats); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(50); screen.set_vblank_time(ATTOSECONDS_IN_USEC(400)); /* 2500 not accurate */ screen.set_size(512, 230); screen.set_visarea(0, 243, 0, 227); screen.set_screen_update(FUNC(hec2hrp_state::screen_update_hec2hrp)); screen.set_palette(m_palette); PALETTE(config, m_palette).set_entries(16); MCFG_VIDEO_START_OVERRIDE(hec2hrp_state,hec2hrp) hector_audio(config); CASSETTE(config, m_cassette); m_cassette->set_formats(hector_cassette_formats); m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED); PRINTER(config, m_printer, 0); }
void tm990189_state::tm990_189(machine_config &config) { /* basic machine hardware */ TMS9980A(config, m_tms9980a, 8_MHz_XTAL); // clock divided by 4 internally m_tms9980a->set_addrmap(AS_PROGRAM, &tm990189_state::tm990_189_memmap); m_tms9980a->set_addrmap(AS_IO, &tm990189_state::tm990_189_cru_map); m_tms9980a->extop_cb().set(FUNC(tm990189_state::external_operation)); MCFG_MACHINE_START_OVERRIDE(tm990189_state, tm990_189 ) MCFG_MACHINE_RESET_OVERRIDE(tm990189_state, tm990_189 ) /* Video hardware */ config.set_default_layout(layout_tm990189); /* sound hardware */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.50); /* Devices */ CASSETTE(config, "cassette", 0).add_route(ALL_OUTPUTS, "mono", 0.25); TMS9901(config, m_tms9901_usr, 8_MHz_XTAL / 4); m_tms9901_usr->p_out_cb(0).set(FUNC(tm990189_state::usr9901_led0_w)); m_tms9901_usr->p_out_cb(1).set(FUNC(tm990189_state::usr9901_led1_w)); m_tms9901_usr->p_out_cb(2).set(FUNC(tm990189_state::usr9901_led2_w)); m_tms9901_usr->p_out_cb(3).set(FUNC(tm990189_state::usr9901_led3_w)); m_tms9901_usr->intlevel_cb().set(FUNC(tm990189_state::usr9901_interrupt_callback)); TMS9901(config, m_tms9901_sys, 8_MHz_XTAL / 4); m_tms9901_sys->read_cb().set(FUNC(tm990189_state::sys9901_r)); m_tms9901_sys->p_out_cb(0).set(FUNC(tm990189_state::sys9901_digitsel0_w)); m_tms9901_sys->p_out_cb(1).set(FUNC(tm990189_state::sys9901_digitsel1_w)); m_tms9901_sys->p_out_cb(2).set(FUNC(tm990189_state::sys9901_digitsel2_w)); m_tms9901_sys->p_out_cb(3).set(FUNC(tm990189_state::sys9901_digitsel3_w)); m_tms9901_sys->p_out_cb(4).set(FUNC(tm990189_state::sys9901_segment0_w)); m_tms9901_sys->p_out_cb(5).set(FUNC(tm990189_state::sys9901_segment1_w)); m_tms9901_sys->p_out_cb(6).set(FUNC(tm990189_state::sys9901_segment2_w)); m_tms9901_sys->p_out_cb(7).set(FUNC(tm990189_state::sys9901_segment3_w)); m_tms9901_sys->p_out_cb(8).set(FUNC(tm990189_state::sys9901_segment4_w)); m_tms9901_sys->p_out_cb(9).set(FUNC(tm990189_state::sys9901_segment5_w)); m_tms9901_sys->p_out_cb(10).set(FUNC(tm990189_state::sys9901_segment6_w)); m_tms9901_sys->p_out_cb(11).set(FUNC(tm990189_state::sys9901_segment7_w)); m_tms9901_sys->p_out_cb(12).set(FUNC(tm990189_state::sys9901_dsplytrgr_w)); m_tms9901_sys->p_out_cb(13).set(FUNC(tm990189_state::sys9901_shiftlight_w)); m_tms9901_sys->p_out_cb(14).set(FUNC(tm990189_state::sys9901_spkrdrive_w)); m_tms9901_sys->p_out_cb(15).set(FUNC(tm990189_state::sys9901_tapewdata_w)); m_tms9901_sys->intlevel_cb().set(FUNC(tm990189_state::sys9901_interrupt_callback)); TMS9902(config, m_tms9902, 8_MHz_XTAL / 4); m_tms9902->xmit_cb().set(FUNC(tm990189_state::xmit_callback)); // called when a character is transmitted TM990_189_RS232(config, "rs232", 0, m_tms9902); timer_device &display_timer(TIMER(config, "display_timer")); display_timer.configure_periodic(FUNC(tm990189_state::display_callback), attotime::from_hz(30)); // Need to delay the timer, or it will spoil the initial LOAD // TODO: Fix this, probably inside CPU display_timer.set_start_delay(attotime::from_msec(150)); }
void nes_state::famitwin(machine_config &config) { famicom(config); MCFG_MACHINE_START_OVERRIDE( nes_state, famitwin ) MCFG_MACHINE_RESET_OVERRIDE( nes_state, famitwin ) m_cartslot->set_must_be_loaded(false); NES_DISKSYS(config, "disk", 0); }
/* Note: lsasquad clock values are not verified */ void lsasquad_state::lsasquad(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, MASTER_CLOCK / 4); m_maincpu->set_addrmap(AS_PROGRAM, &lsasquad_state::lsasquad_map); m_maincpu->set_vblank_int("screen", FUNC(lsasquad_state::irq0_line_hold)); Z80(config, m_audiocpu, MASTER_CLOCK / 8); m_audiocpu->set_addrmap(AS_PROGRAM, &lsasquad_state::lsasquad_sound_map); /* IRQs are triggered by the YM2203 */ TAITO68705_MCU(config, m_bmcu, MASTER_CLOCK / 8); config.m_minimum_quantum = attotime::from_hz(30000); /* 500 CPU slices per frame - a high value to ensure proper */ /* synchronization of the CPUs */ /* main<->sound synchronization depends on this */ MCFG_MACHINE_START_OVERRIDE(lsasquad_state,lsasquad) MCFG_MACHINE_RESET_OVERRIDE(lsasquad_state,lsasquad) GENERIC_LATCH_8(config, m_soundlatch); m_soundlatch->data_pending_callback().set("soundnmi", FUNC(input_merger_device::in_w<0>)); INPUT_MERGER_ALL_HIGH(config, "soundnmi").output_handler().set_inputline(m_audiocpu, INPUT_LINE_NMI); GENERIC_LATCH_8(config, m_soundlatch2); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(32*8, 32*8); screen.set_visarea(0, 32*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(lsasquad_state::screen_update_lsasquad)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_lsasquad); PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 512); /* sound hardware */ SPEAKER(config, "mono").front_center(); YM2149(config, "aysnd", MASTER_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.12); ym2203_device &ymsnd(YM2203(config, "ymsnd", MASTER_CLOCK / 8)); ymsnd.irq_handler().set_inputline(m_audiocpu, 0); ymsnd.port_a_write_callback().set(FUNC(lsasquad_state::unk)); ymsnd.port_b_write_callback().set(FUNC(lsasquad_state::unk)); ymsnd.add_route(0, "mono", 0.12); ymsnd.add_route(1, "mono", 0.12); ymsnd.add_route(2, "mono", 0.12); ymsnd.add_route(3, "mono", 0.63); }
void s4_state::s4(machine_config &config) { /* basic machine hardware */ M6800(config, m_maincpu, 3580000); m_maincpu->set_addrmap(AS_PROGRAM, &s4_state::s4_main_map); TIMER(config, "irq").configure_periodic(FUNC(s4_state::irq), attotime::from_hz(250)); MCFG_MACHINE_RESET_OVERRIDE(s4_state, s4) /* Video */ config.set_default_layout(layout_s4); /* Sound */ genpin_audio(config); /* Devices */ PIA6821(config, m_pia22, 0); m_pia22->writepa_handler().set(FUNC(s4_state::sol0_w)); m_pia22->writepb_handler().set(FUNC(s4_state::sol1_w)); m_pia22->ca2_handler().set(FUNC(s4_state::pia22_ca2_w)); m_pia22->cb2_handler().set(FUNC(s4_state::pia22_cb2_w)); m_pia22->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); m_pia22->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); PIA6821(config, m_pia24, 0); m_pia24->writepa_handler().set(FUNC(s4_state::lamp0_w)); m_pia24->writepb_handler().set(FUNC(s4_state::lamp1_w)); m_pia24->ca2_handler().set(FUNC(s4_state::pia24_ca2_w)); m_pia24->cb2_handler().set(FUNC(s4_state::pia24_cb2_w)); m_pia24->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); m_pia24->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); PIA6821(config, m_pia28, 0); m_pia28->readpa_handler().set(FUNC(s4_state::dips_r)); m_pia28->readca1_handler().set(FUNC(s4_state::pia28_ca1_r)); m_pia28->readcb1_handler().set(FUNC(s4_state::pia28_cb1_r)); m_pia28->writepa_handler().set(FUNC(s4_state::dig0_w)); m_pia28->writepb_handler().set(FUNC(s4_state::dig1_w)); m_pia28->ca2_handler().set(FUNC(s4_state::pia28_ca2_w)); m_pia28->cb2_handler().set(FUNC(s4_state::pia28_cb2_w)); m_pia28->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); m_pia28->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); PIA6821(config, m_pia30, 0); m_pia30->readpa_handler().set(FUNC(s4_state::switch_r)); m_pia30->writepb_handler().set(FUNC(s4_state::switch_w)); m_pia30->ca2_handler().set(FUNC(s4_state::pia30_ca2_w)); m_pia30->cb2_handler().set(FUNC(s4_state::pia30_cb2_w)); m_pia30->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); m_pia30->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); }
void z80ne_state::z80netb(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, Z80NE_CPU_SPEED_HZ); m_maincpu->set_addrmap(AS_PROGRAM, &z80ne_state::z80netb_mem); m_maincpu->set_addrmap(AS_IO, &z80ne_state::z80net_io); MCFG_MACHINE_START_OVERRIDE(z80ne_state,z80netb) MCFG_MACHINE_RESET_OVERRIDE(z80ne_state,z80netb) AY31015(config, m_uart); CLOCK(config, m_uart_clock, 4800); m_uart_clock->signal_handler().set(FUNC(z80ne_state::lx385_uart_tx_clock_w)); m_uart_clock->signal_handler().append(m_uart, FUNC(ay31015_device::write_rcp)); CASSETTE(config, m_cassette1); m_cassette1->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED); m_cassette1->set_interface("z80ne_cass"); CASSETTE(config, m_cassette2); m_cassette2->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED); m_cassette2->set_interface("z80ne_cass"); KR2376_ST(config, m_lx387_kr2376, 50000); m_lx387_kr2376->x<0>().set_ioport("X0"); m_lx387_kr2376->x<1>().set_ioport("X1"); m_lx387_kr2376->x<2>().set_ioport("X2"); m_lx387_kr2376->x<3>().set_ioport("X3"); m_lx387_kr2376->x<4>().set_ioport("X4"); m_lx387_kr2376->x<5>().set_ioport("X5"); m_lx387_kr2376->x<6>().set_ioport("X6"); m_lx387_kr2376->x<7>().set_ioport("X7"); m_lx387_kr2376->shift().set(FUNC(z80ne_state::lx387_shift_r)); m_lx387_kr2376->control().set(FUNC(z80ne_state::lx387_control_r)); /* video hardware */ SCREEN(config, "lx388", SCREEN_TYPE_RASTER); MC6847_PAL(config, m_vdg, 4.433619_MHz_XTAL); m_vdg->set_screen("lx388"); m_vdg->input_callback().set(FUNC(z80ne_state::lx388_mc6847_videoram_r)); // AG = GND, GM2 = GND, GM1 = GND, GM0 = GND, CSS = GND // other lines not connected config.set_default_layout(layout_z80netb); /* internal ram */ RAM(config, m_ram).set_default_size("32K").set_extra_options("1K"); SOFTWARE_LIST(config, "cass_list").set_original("z80ne_cass"); }
void z80netf_state::z80netf(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, Z80NE_CPU_SPEED_HZ); m_maincpu->set_addrmap(AS_PROGRAM, &z80netf_state::z80netf_mem); m_maincpu->set_addrmap(AS_IO, &z80netf_state::z80netf_io); MCFG_MACHINE_START_OVERRIDE(z80netf_state,z80netf) MCFG_MACHINE_RESET_OVERRIDE(z80netf_state,z80netf) AY31015(config, m_uart); CLOCK(config, m_uart_clock, 4800); m_uart_clock->signal_handler().set(FUNC(z80netf_state::lx385_uart_tx_clock_w)); m_uart_clock->signal_handler().append(m_uart, FUNC(ay31015_device::write_rcp)); CASSETTE(config, m_cassette1); m_cassette1->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED); m_cassette1->set_interface("z80ne_cass"); CASSETTE(config, m_cassette2); m_cassette2->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED); m_cassette2->set_interface("z80ne_cass"); KR2376_ST(config, m_lx387_kr2376, 50000); /* video hardware */ SCREEN(config, "lx388", SCREEN_TYPE_RASTER); MC6847_PAL(config, m_vdg, 4.433619_MHz_XTAL); m_vdg->set_screen("lx388"); m_vdg->input_callback().set(FUNC(z80ne_state::lx388_mc6847_videoram_r)); // AG = GND, GM2 = GND, GM1 = GND, GM0 = GND, CSS = GND // other lines not connected FD1771(config, m_wd1771, 2_MHz_XTAL / 2); FLOPPY_CONNECTOR(config, "wd1771:0", z80ne_floppies, "sssd", z80ne_state::floppy_formats); FLOPPY_CONNECTOR(config, "wd1771:1", z80ne_floppies, "sssd", z80ne_state::floppy_formats); FLOPPY_CONNECTOR(config, "wd1771:2", z80ne_floppies, nullptr, z80ne_state::floppy_formats); FLOPPY_CONNECTOR(config, "wd1771:3", z80ne_floppies, nullptr, z80ne_state::floppy_formats); config.set_default_layout(layout_z80netf); /* internal ram */ RAM(config, m_ram).set_default_size("56K"); SOFTWARE_LIST(config, "cass_list").set_original("z80ne_cass"); SOFTWARE_LIST(config, "flop_list").set_original("z80ne_flop"); }
void spectrum_state::spectrum_common(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, X1 / 4); /* This is verified only for the ZX Spectrum. Other clones are reported to have different clocks */ m_maincpu->set_addrmap(AS_PROGRAM, &spectrum_state::spectrum_mem); m_maincpu->set_addrmap(AS_IO, &spectrum_state::spectrum_io); m_maincpu->set_addrmap(AS_OPCODES, &spectrum_state::spectrum_fetch); m_maincpu->set_vblank_int("screen", FUNC(spectrum_state::spec_interrupt)); config.m_minimum_quantum = attotime::from_hz(60); MCFG_MACHINE_RESET_OVERRIDE(spectrum_state, spectrum ) /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(X1 / 2, 448, 0, 352, 312, 0, 296); m_screen->set_screen_update(FUNC(spectrum_state::screen_update_spectrum)); m_screen->screen_vblank().set(FUNC(spectrum_state::screen_vblank_spectrum)); m_screen->set_palette("palette"); PALETTE(config, "palette", FUNC(spectrum_state::spectrum_palette), 16); GFXDECODE(config, "gfxdecode", "palette", gfx_spectrum); MCFG_VIDEO_START_OVERRIDE(spectrum_state, spectrum) /* sound hardware */ SPEAKER(config, "mono").front_center(); WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "mono", 0.25); SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.50); /* expansion port */ SPECTRUM_EXPANSION_SLOT(config, m_exp, spectrum_expansion_devices, "kempjoy"); m_exp->irq_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0); m_exp->nmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); /* devices */ snapshot_image_device &snapshot(SNAPSHOT(config, "snapshot")); snapshot.set_handler(snapquick_load_delegate(&SNAPSHOT_LOAD_NAME(spectrum_state, spectrum), this), "ach,frz,plusd,prg,sem,sit,sna,snp,snx,sp,z80,zx"); quickload_image_device &quickload(QUICKLOAD(config, "quickload")); quickload.set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(spectrum_state, spectrum), this), "raw,scr", attotime::from_seconds(2)); // The delay prevents the screen from being cleared by the RAM test at boot CASSETTE(config, m_cassette); m_cassette->set_formats(tzx_cassette_formats); m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED); m_cassette->set_interface("spectrum_cass"); SOFTWARE_LIST(config, "cass_list").set_original("spectrum_cass"); }
void nes_state::fds(machine_config &config) { famicom(config); MCFG_MACHINE_START_OVERRIDE(nes_state, fds) MCFG_MACHINE_RESET_OVERRIDE(nes_state, fds) config.device_remove("nes_slot"); NES_DISKSYS(config, "disk", 0); config.device_remove("cart_list"); config.device_remove("cass_list"); config.device_remove("ade_list"); config.device_remove("ntb_list"); config.device_remove("kstudio_list"); config.device_remove("datach_list"); }
void stargame_state::stargame(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 15000000 / 4); // clock line marked as CK4 and derived from 15MHz crystal m_maincpu->set_addrmap(AS_PROGRAM, &stargame_state::maincpu_map); m_maincpu->set_addrmap(AS_IO, &stargame_state::maincpu_io); m_maincpu->set_daisy_config(daisy_chain); Z80(config, m_audiocpu, 15000000 / 3); // ? check divider - clock line marked as CK6 and derived from 15MHz crystal m_audiocpu->set_addrmap(AS_PROGRAM, &stargame_state::audiocpu_map); m_audiocpu->set_addrmap(AS_IO, &stargame_state::audiocpu_io); MCFG_MACHINE_RESET_OVERRIDE(stargame_state, stargame) /* video hardware */ //config.set_default_layout(); Z80CTC(config, m_ctc, 15000000 / 4); m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); m_ctc->zc_callback<0>().set_inputline(m_audiocpu, INPUT_LINE_IRQ0); // SINT - turn on interrupt of the audiocpu /* sound hardware */ genpin_audio(config); SPEAKER(config, "measnd").front_center(); MEA8000(config, "mea8000", 15000000 / 4).add_route(ALL_OUTPUTS, "measnd", 1.0); SPEAKER(config, "aysnd").front_center(); AY8910(config, "ay", 15000000 / 8).add_route(ALL_OUTPUTS, "aysnd", 0.25); // clock line marked as CK2 and derived from 15MHz crystal ls259_device &mainlatch(LS259(config, "mainlatch")); mainlatch.q_out_cb<0>().set_nop(); // DADIS mainlatch.q_out_cb<1>().set_nop(); // DAPRI mainlatch.q_out_cb<2>().set_nop(); // RJUEGO mainlatch.q_out_cb<3>().set_nop(); // RFLIPPER mainlatch.q_out_cb<4>().set_nop(); // to AUXILLIAR socket mainlatch.q_out_cb<5>().set_nop(); // RFDIS mainlatch.q_out_cb<6>().set_inputline(m_audiocpu, INPUT_LINE_RESET).invert(); // SRESET mainlatch.q_out_cb<7>().set_nop(); // MAKRES GENERIC_LATCH_8(config, "soundlatch").data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); WATCHDOG_TIMER(config, "watchdog"); }
void s4_state::s4a(machine_config &config) { s4(config); /* Add the soundcard */ M6808(config, m_audiocpu, 3580000); m_audiocpu->set_addrmap(AS_PROGRAM, &s4_state::s4_audio_map); MCFG_MACHINE_RESET_OVERRIDE(s4_state, s4a) SPEAKER(config, "speaker").front_center(); MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); PIA6821(config, m_pias, 0); m_pias->readpb_handler().set(FUNC(s4_state::sound_r)); m_pias->writepa_handler().set("dac", FUNC(dac_byte_interface::data_w)); m_pias->irqa_handler().set_inputline("audiocpu", M6808_IRQ_LINE); m_pias->irqb_handler().set_inputline("audiocpu", M6808_IRQ_LINE); }
void gb_state::gbcolor(machine_config &config) { /* basic machine hardware */ LR35902(config, m_maincpu, XTAL(4'194'304)); // todo XTAL(8'388'000) m_maincpu->set_addrmap(AS_PROGRAM, &gb_state::gbc_map); m_maincpu->timer_cb().set(FUNC(gb_state::gb_timer_callback)); MCFG_MACHINE_START_OVERRIDE(gb_state,gbc) MCFG_MACHINE_RESET_OVERRIDE(gb_state,gbc) /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); screen.set_refresh_hz(DMG_FRAMES_PER_SECOND); screen.set_vblank_time(0); screen.set_screen_update("ppu", FUNC(dmg_ppu_device::screen_update)); screen.set_palette(m_palette); // screen.set_size(20*8, 18*8); screen.set_size(458, 154); screen.set_visarea(0*8, 20*8-1, 0*8, 18*8-1); GFXDECODE(config, "gfxdecode", m_palette, gfxdecode_device::empty); PALETTE(config, m_palette, FUNC(gb_state::gbc_palette), 32768); CGB_PPU(config, m_ppu, m_maincpu); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); CGB04_APU(config, m_apu, XTAL(4'194'304)); m_apu->add_route(0, "lspeaker", 0.50); m_apu->add_route(1, "rspeaker", 0.50); /* internal ram */ RAM(config, RAM_TAG).set_default_size("48K"); /* 2 pages of 8KB VRAM, 8 pages of 4KB RAM */ /* cartslot */ GB_CART_SLOT(config, "gbslot", gb_cart, nullptr); SOFTWARE_LIST(config, "cart_list").set_original("gbcolor"); SOFTWARE_LIST(config, "gb_list").set_compatible("gameboy"); }
void gb_state::supergb2(machine_config &config) { gameboy(config); /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &gb_state::sgb_map); MCFG_MACHINE_START_OVERRIDE(gb_state, sgb) MCFG_MACHINE_RESET_OVERRIDE(gb_state, sgb) /* video hardware */ screen_device &screen(*subdevice<screen_device>("screen")); screen.set_physical_aspect(4, 3); // runs on a TV, not an LCD screen.set_size(32*8, 28*8); screen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1); m_palette->set_entries(32768); m_palette->set_init(FUNC(gb_state::sgb_palette)); SGB_PPU(config.replace(), m_ppu, m_maincpu); }
void hec2hrp_state::hec2mx80(machine_config &config) { Z80(config, m_maincpu, 5_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &hec2hrp_state::hec2hrx_mem); m_maincpu->set_addrmap(AS_IO, &hec2hrp_state::hec2mx80_io); m_maincpu->set_periodic_int(FUNC(hec2hrp_state::irq0_line_hold), attotime::from_hz(50)); /* put on the Z80 irq in Hz*/ MCFG_MACHINE_RESET_OVERRIDE(hec2hrp_state,hec2hrx) MCFG_MACHINE_START_OVERRIDE(hec2hrp_state,hec2hrx) Z80(config, m_disc2cpu, 4_MHz_XTAL); m_disc2cpu->set_addrmap(AS_PROGRAM, &hec2hrp_state::hecdisc2_mem); m_disc2cpu->set_addrmap(AS_IO, &hec2hrp_state::hecdisc2_io); UPD765A(config, m_upd_fdc, 8'000'000, false, true); m_upd_fdc->intrq_wr_callback().set(FUNC(hec2hrp_state::disc2_fdc_interrupt)); m_upd_fdc->drq_wr_callback().set(FUNC(hec2hrp_state::disc2_fdc_dma_irq)); FLOPPY_CONNECTOR(config, m_upd_connector[0], hector_floppies, "525hd", floppy_image_device::default_floppy_formats); FLOPPY_CONNECTOR(config, m_upd_connector[1], hector_floppies, "525hd", floppy_image_device::default_floppy_formats); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(50); screen.set_vblank_time(ATTOSECONDS_IN_USEC(400)); /* 2500 not accurate */ screen.set_size(512, 230); screen.set_visarea(0, 243, 0, 227); screen.set_screen_update(FUNC(hec2hrp_state::screen_update_hec2hrp)); screen.set_palette(m_palette); PALETTE(config, m_palette).set_entries(16); MCFG_VIDEO_START_OVERRIDE(hec2hrp_state,hec2hrp) hector_audio(config); CASSETTE(config, m_cassette); m_cassette->set_formats(hector_cassette_formats); m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED); PRINTER(config, m_printer, 0); }
void gb_state::supergb(machine_config &config) { /* basic machine hardware */ LR35902(config, m_maincpu, 4295454); /* 4.295454 MHz, derived from SNES xtal */ m_maincpu->set_addrmap(AS_PROGRAM, &gb_state::sgb_map); m_maincpu->timer_cb().set(FUNC(gb_state::gb_timer_callback)); m_maincpu->set_halt_bug(true); MCFG_MACHINE_START_OVERRIDE(gb_state, sgb) MCFG_MACHINE_RESET_OVERRIDE(gb_state, sgb) /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); screen.set_physical_aspect(4, 3); // runs on a TV, not an LCD screen.set_refresh_hz(SGB_FRAMES_PER_SECOND); screen.set_vblank_time(0); screen.set_screen_update("ppu", FUNC(dmg_ppu_device::screen_update)); screen.set_palette(m_palette); screen.set_size(32*8, 28*8); screen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1); GFXDECODE(config, "gfxdecode", m_palette, gfxdecode_device::empty); PALETTE(config, m_palette, FUNC(gb_state::sgb_palette), 32768); SGB_PPU(config, m_ppu, m_maincpu); /* sound hardware */ SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); DMG_APU(config, m_apu, 4295454); m_apu->add_route(0, "lspeaker", 0.50); m_apu->add_route(1, "rspeaker", 0.50); /* cartslot */ GB_CART_SLOT(config, m_cartslot, gb_cart, nullptr); SOFTWARE_LIST(config, "cart_list").set_original("gameboy"); SOFTWARE_LIST(config, "gbc_list").set_compatible("gbcolor"); }
void z80ne_state::z80net(machine_config &config) { z80ne(config); m_maincpu->set_addrmap(AS_PROGRAM, &z80ne_state::z80net_mem); m_maincpu->set_addrmap(AS_IO, &z80ne_state::z80net_io); MCFG_MACHINE_START_OVERRIDE(z80ne_state, z80net ) MCFG_MACHINE_RESET_OVERRIDE(z80ne_state, z80net ) KR2376_ST(config, m_lx387_kr2376, 50000); m_lx387_kr2376->x<0>().set_ioport("X0"); m_lx387_kr2376->x<1>().set_ioport("X1"); m_lx387_kr2376->x<2>().set_ioport("X2"); m_lx387_kr2376->x<3>().set_ioport("X3"); m_lx387_kr2376->x<4>().set_ioport("X4"); m_lx387_kr2376->x<5>().set_ioport("X5"); m_lx387_kr2376->x<6>().set_ioport("X6"); m_lx387_kr2376->x<7>().set_ioport("X7"); m_lx387_kr2376->shift().set(FUNC(z80ne_state::lx387_shift_r)); m_lx387_kr2376->control().set(FUNC(z80ne_state::lx387_control_r)); /* video hardware */ SCREEN(config, "lx388", SCREEN_TYPE_RASTER); MC6847_PAL(config, m_vdg, 4.433619_MHz_XTAL); m_vdg->set_screen("lx388"); m_vdg->input_callback().set(FUNC(z80ne_state::lx388_mc6847_videoram_r)); // AG = GND, GM2 = GND, GM1 = GND, GM0 = GND, CSS = GND // other lines not connected config.set_default_layout(layout_z80net); /* internal ram */ m_ram->set_default_size("32K").set_extra_options("1K"); SOFTWARE_LIST(config, "cass_list").set_original("z80ne_cass"); }
void s6_state::s6(machine_config &config) { /* basic machine hardware */ M6808(config, m_maincpu, 3580000); // 6802 or 6808 could be used here m_maincpu->set_addrmap(AS_PROGRAM, &s6_state::s6_main_map); MCFG_MACHINE_RESET_OVERRIDE(s6_state, s6) /* Video */ config.set_default_layout(layout_s6); /* Sound */ genpin_audio(config); /* Devices */ PIA6821(config, m_pia22, 0); m_pia22->writepa_handler().set(FUNC(s6_state::sol0_w)); m_pia22->writepb_handler().set(FUNC(s6_state::sol1_w)); m_pia22->ca2_handler().set(FUNC(s6_state::pia22_ca2_w)); m_pia22->cb2_handler().set(FUNC(s6_state::pia22_cb2_w)); m_pia22->irqa_handler().set(FUNC(s6_state::pia_irq)); m_pia22->irqb_handler().set(FUNC(s6_state::pia_irq)); PIA6821(config, m_pia24, 0); m_pia24->writepa_handler().set(FUNC(s6_state::lamp0_w)); m_pia24->writepb_handler().set(FUNC(s6_state::lamp1_w)); m_pia24->ca2_handler().set(FUNC(s6_state::pia24_ca2_w)); m_pia24->cb2_handler().set(FUNC(s6_state::pia24_cb2_w)); m_pia24->irqa_handler().set(FUNC(s6_state::pia_irq)); m_pia24->irqb_handler().set(FUNC(s6_state::pia_irq)); PIA6821(config, m_pia28, 0); m_pia28->readpa_handler().set(FUNC(s6_state::dips_r)); m_pia28->writepa_handler().set(FUNC(s6_state::dig0_w)); m_pia28->writepb_handler().set(FUNC(s6_state::dig1_w)); m_pia28->ca2_handler().set(FUNC(s6_state::pia28_ca2_w)); m_pia28->cb2_handler().set(FUNC(s6_state::pia28_cb2_w)); m_pia28->irqa_handler().set(FUNC(s6_state::pia_irq)); m_pia28->irqb_handler().set(FUNC(s6_state::pia_irq)); PIA6821(config, m_pia30, 0); m_pia30->readpa_handler().set(FUNC(s6_state::switch_r)); m_pia30->writepb_handler().set(FUNC(s6_state::switch_w)); m_pia30->ca2_handler().set(FUNC(s6_state::pia30_ca2_w)); m_pia30->cb2_handler().set(FUNC(s6_state::pia30_cb2_w)); m_pia30->irqa_handler().set(FUNC(s6_state::pia_irq)); m_pia30->irqb_handler().set(FUNC(s6_state::pia_irq)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* Add the soundcard */ M6802(config, m_audiocpu, 3580000); m_audiocpu->set_addrmap(AS_PROGRAM, &s6_state::s6_audio_map); SPEAKER(config, "speaker").front_center(); MC1408(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); SPEAKER(config, "speech").front_center(); HC55516(config, m_hc55516, 0).add_route(ALL_OUTPUTS, "speech", 1.00); PIA6821(config, m_pias, 0); m_pias->readpb_handler().set(FUNC(s6_state::sound_r)); m_pias->writepa_handler().set("dac", FUNC(dac_byte_interface::data_w)); m_pias->ca2_handler().set(m_hc55516, FUNC(hc55516_device::digit_w)); m_pias->cb2_handler().set(m_hc55516, FUNC(hc55516_device::clock_w)); m_pias->irqa_handler().set_inputline(m_audiocpu, M6802_IRQ_LINE); // FIXME: needs an input merger m_pias->irqb_handler().set_inputline(m_audiocpu, M6802_IRQ_LINE); }
void tm990189_state::tm990_189_v(machine_config &config) { /* basic machine hardware */ TMS9980A(config, m_tms9980a, 8_MHz_XTAL); m_tms9980a->set_addrmap(AS_PROGRAM, &tm990189_state::tm990_189_v_memmap); m_tms9980a->set_addrmap(AS_IO, &tm990189_state::tm990_189_cru_map); m_tms9980a->extop_cb().set(FUNC(tm990189_state::external_operation)); MCFG_MACHINE_START_OVERRIDE(tm990189_state, tm990_189_v ) MCFG_MACHINE_RESET_OVERRIDE(tm990189_state, tm990_189_v ) /* video hardware */ tms9918_device &vdp(TMS9918(config, "tms9918", XTAL(10'738'635))); vdp.set_screen("screen"); vdp.set_vram_size(0x4000); SCREEN(config, "screen", SCREEN_TYPE_RASTER); config.set_default_layout(layout_tm990189v); /* sound hardware */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.50); /* one two-level buzzer */ /* Devices */ CASSETTE(config, "cassette", 0).add_route(ALL_OUTPUTS, "mono", 0.25); TMS9901(config, m_tms9901_usr, 8_MHz_XTAL / 4); m_tms9901_usr->p_out_cb(0).set(FUNC(tm990189_state::usr9901_led0_w)); m_tms9901_usr->p_out_cb(1).set(FUNC(tm990189_state::usr9901_led1_w)); m_tms9901_usr->p_out_cb(2).set(FUNC(tm990189_state::usr9901_led2_w)); m_tms9901_usr->p_out_cb(3).set(FUNC(tm990189_state::usr9901_led3_w)); m_tms9901_usr->intlevel_cb().set(FUNC(tm990189_state::usr9901_interrupt_callback)); TMS9901(config, m_tms9901_sys, 8_MHz_XTAL / 4); m_tms9901_sys->read_cb().set(FUNC(tm990189_state::sys9901_r)); m_tms9901_sys->p_out_cb(0).set(FUNC(tm990189_state::sys9901_digitsel0_w)); m_tms9901_sys->p_out_cb(1).set(FUNC(tm990189_state::sys9901_digitsel1_w)); m_tms9901_sys->p_out_cb(2).set(FUNC(tm990189_state::sys9901_digitsel2_w)); m_tms9901_sys->p_out_cb(3).set(FUNC(tm990189_state::sys9901_digitsel3_w)); m_tms9901_sys->p_out_cb(4).set(FUNC(tm990189_state::sys9901_segment0_w)); m_tms9901_sys->p_out_cb(5).set(FUNC(tm990189_state::sys9901_segment1_w)); m_tms9901_sys->p_out_cb(6).set(FUNC(tm990189_state::sys9901_segment2_w)); m_tms9901_sys->p_out_cb(7).set(FUNC(tm990189_state::sys9901_segment3_w)); m_tms9901_sys->p_out_cb(8).set(FUNC(tm990189_state::sys9901_segment4_w)); m_tms9901_sys->p_out_cb(9).set(FUNC(tm990189_state::sys9901_segment5_w)); m_tms9901_sys->p_out_cb(10).set(FUNC(tm990189_state::sys9901_segment6_w)); m_tms9901_sys->p_out_cb(11).set(FUNC(tm990189_state::sys9901_segment7_w)); m_tms9901_sys->p_out_cb(12).set(FUNC(tm990189_state::sys9901_dsplytrgr_w)); m_tms9901_sys->p_out_cb(13).set(FUNC(tm990189_state::sys9901_shiftlight_w)); m_tms9901_sys->p_out_cb(14).set(FUNC(tm990189_state::sys9901_spkrdrive_w)); m_tms9901_sys->p_out_cb(15).set(FUNC(tm990189_state::sys9901_tapewdata_w)); m_tms9901_sys->intlevel_cb().set(FUNC(tm990189_state::sys9901_interrupt_callback)); TMS9902(config, m_tms9902, 8_MHz_XTAL / 4); m_tms9902->xmit_cb().set(FUNC(tm990189_state::xmit_callback)); // called when a character is transmitted; TM990_189_RS232(config, "rs232", 0, m_tms9902); timer_device &display_timer(TIMER(config, "display_timer")); display_timer.configure_periodic(FUNC(tm990189_state::display_callback), attotime::from_hz(30)); display_timer.set_start_delay(attotime::from_msec(150)); }