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); }
DEVICE_INPUT_DEFAULTS_END #endif /* Fake clock values until we TODO: figure out how the PTM generates the clocks */ #define CAN09T_BAUDGEN_CLOCK 1.8432_MHz_XTAL #define CAN09T_ACIA_CLOCK (CAN09T_BAUDGEN_CLOCK / 12) void can09t_state::can09t(machine_config &config) { MC6809(config, m_maincpu, 4.9152_MHz_XTAL); // IPL crystal m_maincpu->set_addrmap(AS_PROGRAM, &can09t_state::can09t_map); /* --PIA inits----------------------- */ PIA6821(config, m_syspia, 0); // CPU board m_syspia->readpa_handler().set(FUNC(can09t_state::syspia_A_r)); m_syspia->readpb_handler().set(FUNC(can09t_state::syspia_B_r)); m_syspia->writepb_handler().set(FUNC(can09t_state::syspia_B_w)); m_syspia->cb2_handler().set(FUNC(can09t_state::syspia_cb2_w)); /* 0xE1FB 0xB112 (SYSPIA Control A) = 0x00 - Channel A IRQ disabled */ /* 0xE1FB 0xB113 (SYSPIA Control B) = 0x00 - Channel B IRQ disabled */ /* 0xE203 0xB110 (SYSPIA DDR A) = 0x00 - Port A all inputs */ /* 0xE203 0xB111 (SYSPIA DDR B) = 0x7F - Port B mixed mode */ /* 0xE20A 0xB112 (SYSPIA Control A) = 0x05 - IRQ A enabled on falling transition on CA2 */ /* 0xE20A 0xB113 (SYSPIA Control B) = 0x34 - CB2 is low and lock DDRB */ /* 0xE20E 0xB111 (SYSPIA port B) = 0x10 - Data to port B */ PIA6821(config, m_usrpia, 0); // CPU board m_usrpia->cb2_handler().set(FUNC(can09t_state::usrpia_cb2_w)); /* 0xE212 0xB122 (USRPIA Control A) = 0x00 - Channel A IRQ disabled */ /* 0xE212 0xB123 (USRPIA Control B) = 0x00 - Channel B IRQ disabled */ /* 0xE215 0xB120 (USRPIA DDR A) = 0x00 - Port A all inputs */ /* 0xE215 0xB121 (USRPIA DDR B) = 0xFF - Port B all outputs */ /* 0xE21A 0xB122 (USRPIA Control A) = 0x34 - CA2 is low and lock DDRB */ /* 0xE21A 0xB123 (USRPIA Control B) = 0x34 - CB2 is low and lock DDRB */ PIA6821(config, m_pia3, 0); // ROM board PIA6821(config, m_pia4, 0); // ROM board PTM6840(config, "ptm", 0); /* 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)); }
DEVICE_INPUT_DEFAULTS_END //------------------------------------------------- // device_add_mconfig - add device-specific // machine configuration //------------------------------------------------- void ss50_mpc_device::device_add_mconfig(machine_config &config) { PIA6821(config, m_pia, 0); // actually MC6820 m_pia->writepa_handler().set("outgate", FUNC(input_merger_device::in_w<0>)).bit(0); m_pia->cb2_handler().set(FUNC(ss50_mpc_device::reader_control_w)); m_pia->readpb_handler().set_ioport("STOP").mask(0x01).lshift(6); m_pia->readpb_handler().append(FUNC(ss50_mpc_device::count_r)).lshift(7); m_pia->writepb_handler().set(FUNC(ss50_mpc_device::count_select_w)).bit(2); m_pia->writepb_handler().append(m_counter, FUNC(ripple_counter_device::reset_w)).bit(0); //m_pia->irqa_handler().set(FUNC(ss50_mpc_device::pia_irq_w)); //m_pia->irqb_handler().set(FUNC(ss50_mpc_device::pia_irq_w)); rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); rs232.rxd_handler().set(FUNC(ss50_mpc_device::serial_input_w)); rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); INPUT_MERGER_ALL_HIGH(config, "outgate").output_handler().set("rs232", FUNC(rs232_port_device::write_txd)); INPUT_MERGER_ANY_HIGH(config, m_loopback).output_handler().set("outgate", FUNC(input_merger_device::in_w<1>)); RIPPLE_COUNTER(config, m_counter); // CD4024AE (IC3) m_counter->set_stages(7); // only Q5 (÷32) and Q4 (÷16) are actually used }
void lwriter_state::lwriter(machine_config &config) { M68000(config, m_maincpu, CPU_CLK); m_maincpu->set_addrmap(AS_PROGRAM, &lwriter_state::maincpu_map); SCC8530N(config, m_scc, CPU_CLK); m_scc->configure_channels(RXC_CLK, 0, RXC_CLK, 0); /* Port A */ m_scc->out_txda_callback().set("rs232a", FUNC(rs232_port_device::write_txd)); m_scc->out_dtra_callback().set("rs232a", FUNC(rs232_port_device::write_dtr)); m_scc->out_rtsa_callback().set("rs232a", FUNC(rs232_port_device::write_rts)); /* Port B */ m_scc->out_txdb_callback().set("rs232b", FUNC(rs232_port_device::write_txd)); m_scc->out_dtrb_callback().set("rs232b", FUNC(rs232_port_device::write_dtr)); m_scc->out_rtsb_callback().set("rs232b", FUNC(rs232_port_device::write_rts)); /* Interrupt */ m_scc->out_int_callback().set("via", FUNC(via6522_device::write_ca1)); //m_scc->out_int_callback().set(FUNC(lwriter_state::scc_int)); rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal")); rs232a.rxd_handler().set("scc", FUNC(scc8530_device::rxa_w)); rs232a.cts_handler().set("scc", FUNC(scc8530_device::ctsa_w)); rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, "terminal")); rs232b.rxd_handler().set("scc", FUNC(scc8530_device::rxb_w)); rs232b.cts_handler().set("scc", FUNC(scc8530_device::ctsb_w)); #if TPI TPI6525(config, "tpi", 0); #else VIA6522(config, m_via, CPU_CLK/10); // 68000 E clock presumed m_via->readpa_handler().set(FUNC(lwriter_state::via_pa_r)); m_via->readpb_handler().set(FUNC(lwriter_state::via_pb_r)); m_via->writepa_handler().set(FUNC(lwriter_state::via_pa_w)); m_via->writepb_handler().set(FUNC(lwriter_state::via_pb_w)); m_via->cb1_handler().set(FUNC(lwriter_state::via_cb1_w)); m_via->ca2_handler().set(FUNC(lwriter_state::via_ca2_w)); m_via->cb2_handler().set(FUNC(lwriter_state::via_cb2_w)); m_via->irq_handler().set(FUNC(lwriter_state::via_int_w)); #endif }
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 bitgraph_state::bg_motherboard(machine_config &config) { SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(40); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ m_screen->set_size(1024, 768); m_screen->set_visarea_full(); m_screen->set_screen_update(FUNC(bitgraph_state::screen_update)); m_screen->set_palette("palette"); PALETTE(config, "palette", palette_device::MONOCHROME); ACIA6850(config, m_acia0, 0); m_acia0->txd_handler().set(RS232_H_TAG, FUNC(rs232_port_device::write_txd)); m_acia0->rts_handler().set(RS232_H_TAG, FUNC(rs232_port_device::write_rts)); m_acia0->irq_handler().set_inputline(m_maincpu, M68K_IRQ_1); rs232_port_device &rs232h(RS232_PORT(config, RS232_H_TAG, default_rs232_devices, "null_modem")); rs232h.rxd_handler().set(m_acia0, FUNC(acia6850_device::write_rxd)); rs232h.dcd_handler().set(m_acia0, FUNC(acia6850_device::write_dcd)); rs232h.cts_handler().set(m_acia0, FUNC(acia6850_device::write_cts)); ACIA6850(config, m_acia1, 0); m_acia1->txd_handler().set(RS232_K_TAG, FUNC(rs232_port_device::write_txd)); m_acia1->rts_handler().set(RS232_K_TAG, FUNC(rs232_port_device::write_rts)); m_acia1->irq_handler().set_inputline(m_maincpu, M68K_IRQ_1); rs232_port_device &rs232k(RS232_PORT(config, RS232_K_TAG, default_rs232_devices, "keyboard")); rs232k.rxd_handler().set(m_acia1, FUNC(acia6850_device::write_rxd)); rs232k.dcd_handler().set(m_acia1, FUNC(acia6850_device::write_dcd)); rs232k.cts_handler().set(m_acia1, FUNC(acia6850_device::write_cts)); rs232k.set_option_device_input_defaults("keyboard", DEVICE_INPUT_DEFAULTS_NAME(kbd_rs232_defaults)); ACIA6850(config, m_acia2, 0); m_acia2->txd_handler().set(RS232_D_TAG, FUNC(rs232_port_device::write_txd)); m_acia2->rts_handler().set(RS232_D_TAG, FUNC(rs232_port_device::write_rts)); m_acia2->irq_handler().set_inputline(m_maincpu, M68K_IRQ_1); rs232_port_device &rs232d(RS232_PORT(config, RS232_D_TAG, default_rs232_devices, nullptr)); rs232d.rxd_handler().set(m_acia2, FUNC(acia6850_device::write_rxd)); rs232d.dcd_handler().set(m_acia2, FUNC(acia6850_device::write_dcd)); rs232d.cts_handler().set(m_acia2, FUNC(acia6850_device::write_cts)); // XXX actual part may be something else COM8116(config, m_dbrga, 5.0688_MHz_XTAL); m_dbrga->fr_handler().set(FUNC(bitgraph_state::com8116_a_fr_w)); m_dbrga->ft_handler().set(FUNC(bitgraph_state::com8116_a_ft_w)); COM8116(config, m_dbrgb, 5.0688_MHz_XTAL); m_dbrgb->fr_handler().set(FUNC(bitgraph_state::com8116_b_fr_w)); m_dbrgb->ft_handler().set(FUNC(bitgraph_state::com8116_b_ft_w)); PIA6821(config, m_pia, 0); m_pia->readca1_handler().set(FUNC(bitgraph_state::pia_ca1_r)); m_pia->cb2_handler().set(FUNC(bitgraph_state::pia_cb2_w)); m_pia->readpa_handler().set(FUNC(bitgraph_state::pia_pa_r)); m_pia->writepa_handler().set(FUNC(bitgraph_state::pia_pa_w)); m_pia->readpb_handler().set(FUNC(bitgraph_state::pia_pb_r)); m_pia->writepb_handler().set(FUNC(bitgraph_state::pia_pb_w)); ER2055(config, m_earom, 0); SPEAKER(config, "mono").front_center(); AY8912(config, m_psg, XTAL(1'294'400)); m_psg->port_a_write_callback().set(FUNC(bitgraph_state::earom_write)); m_psg->add_route(ALL_OUTPUTS, "mono", 1.00); }
/* 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 by133_state::babypac(machine_config &config) { /* basic machine hardware */ M6800(config, m_maincpu, XTAL(3'579'545)/4); // no xtal, just 2 chips m_maincpu->set_addrmap(AS_PROGRAM, &by133_state::main_map); MC6809(config, m_videocpu, XTAL(3'579'545)); m_videocpu->set_addrmap(AS_PROGRAM, &by133_state::video_map); M6803(config, m_audiocpu, XTAL(3'579'545)); m_audiocpu->set_addrmap(AS_PROGRAM, &by133_state::sound_map); m_audiocpu->out_p1_cb().set("dac", FUNC(dac_byte_interface::data_w)); // P10-P17 m_audiocpu->in_p2_cb().set(FUNC(by133_state::m6803_port2_r)); // P20-P24 sound command in m_audiocpu->out_p2_cb().set(FUNC(by133_state::m6803_port2_w)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); PIA6821(config, m_pia_u7, 0); m_pia_u7->readpa_handler().set(FUNC(by133_state::u7_a_r)); m_pia_u7->writepa_handler().set(FUNC(by133_state::u7_a_w)); m_pia_u7->readpb_handler().set(FUNC(by133_state::u7_b_r)); m_pia_u7->writepb_handler().set(FUNC(by133_state::u7_b_w)); m_pia_u7->ca2_handler().set(FUNC(by133_state::u7_ca2_w)); m_pia_u7->cb2_handler().set(FUNC(by133_state::u7_cb2_w)); m_pia_u7->irqa_handler().set_inputline("videocpu", M6809_FIRQ_LINE); m_pia_u7->irqa_handler().set_inputline("videocpu", M6809_FIRQ_LINE); PIA6821(config, m_pia_u10, 0); m_pia_u10->readpa_handler().set(FUNC(by133_state::u10_a_r)); m_pia_u10->writepa_handler().set(FUNC(by133_state::u10_a_w)); m_pia_u10->readpb_handler().set(FUNC(by133_state::u10_b_r)); m_pia_u10->writepb_handler().set(FUNC(by133_state::u10_b_w)); m_pia_u10->ca2_handler().set(FUNC(by133_state::u10_ca2_w)); m_pia_u10->cb2_handler().set(FUNC(by133_state::u10_cb2_w)); m_pia_u10->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); m_pia_u10->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); TIMER(config, "babypac1").configure_periodic(FUNC(by133_state::u10_timer), attotime::from_hz(120)); // mains freq*2 PIA6821(config, m_pia_u11, 0); m_pia_u11->readpa_handler().set(FUNC(by133_state::u11_a_r)); m_pia_u11->writepa_handler().set(FUNC(by133_state::u11_a_w)); m_pia_u11->readpb_handler().set(FUNC(by133_state::u11_b_r)); m_pia_u11->writepb_handler().set(FUNC(by133_state::u11_b_w)); m_pia_u11->ca2_handler().set(FUNC(by133_state::u11_ca2_w)); m_pia_u11->cb2_handler().set(FUNC(by133_state::u11_cb2_w)); m_pia_u11->irqa_handler().set_inputline("maincpu", M6800_IRQ_LINE); m_pia_u11->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); TIMER(config, "babypac2").configure_periodic(FUNC(by133_state::u11_timer), attotime::from_hz(634)); // 555 timer*2 /* video hardware */ TMS9928A(config, m_crtc, XTAL(10'738'635)).set_screen("screen"); m_crtc->set_vram_size(0x4000); m_crtc->int_callback().set_inputline(m_videocpu, M6809_IRQ_LINE); SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "speaker").front_center(); ZN429E(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // U32 (Vidiot) or U6 (Cheap Squeak) 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, "beee").front_center(); BEEP(config, m_beep, 600).add_route(ALL_OUTPUTS, "beee", 0.10); }