GFXDECODE_END void mbc200_state::mbc200(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 8_MHz_XTAL / 2); // NEC D780C-1 m_maincpu->set_addrmap(AS_PROGRAM, &mbc200_state::mbc200_mem); m_maincpu->set_addrmap(AS_IO, &mbc200_state::mbc200_io); z80_device &subcpu(Z80(config, "subcpu", 8_MHz_XTAL / 2)); // NEC D780C-1 subcpu.set_addrmap(AS_PROGRAM, &mbc200_state::mbc200_sub_mem); subcpu.set_addrmap(AS_IO, &mbc200_state::mbc200_sub_io); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(50); screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_size(640, 400); screen.set_visarea(0, 640-1, 0, 400-1); screen.set_screen_update("crtc", FUNC(hd6845s_device::screen_update)); GFXDECODE(config, "gfxdecode", m_palette, gfx_mbc200); PALETTE(config, m_palette, palette_device::MONOCHROME); HD6845S(config, m_crtc, 8_MHz_XTAL / 4); // HD46505SP m_crtc->set_screen("screen"); m_crtc->set_show_border_area(false); m_crtc->set_char_width(8); m_crtc->set_update_row_callback(FUNC(mbc200_state::update_row), this); // sound SPEAKER(config, "mono").front_center(); BEEP(config, m_beep, 1000).add_route(ALL_OUTPUTS, "mono", 0.50); // frequency unknown SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50); I8255(config, "ppi_1").out_pc_callback().set(FUNC(mbc200_state::p1_portc_w)); I8255(config, "ppi_2").in_pa_callback().set(FUNC(mbc200_state::p2_porta_r)); I8255(config, m_ppi_m); m_ppi_m->out_pa_callback().set(FUNC(mbc200_state::pm_porta_w)); m_ppi_m->out_pb_callback().set(FUNC(mbc200_state::pm_portb_w)); I8251(config, "uart1", 0); // INS8251N I8251(config, "uart2", 0); // INS8251A MB8876(config, m_fdc, 8_MHz_XTAL / 8); // guess FLOPPY_CONNECTOR(config, "fdc:0", mbc200_floppies, "qd", floppy_image_device::default_floppy_formats).enable_sound(true); FLOPPY_CONNECTOR(config, "fdc:1", mbc200_floppies, "qd", floppy_image_device::default_floppy_formats).enable_sound(true); /* Keyboard */ generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); keyboard.set_keyboard_callback(FUNC(mbc200_state::kbd_put)); /* software lists */ SOFTWARE_LIST(config, "flop_list").set_original("mbc200"); }
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); }
INPUT_PORTS_END void cit220_state::cit220p(machine_config &config) { I8085A(config, m_maincpu, 6000000); m_maincpu->set_addrmap(AS_PROGRAM, &cit220_state::mem_map); m_maincpu->set_addrmap(AS_IO, &cit220_state::io_map); m_maincpu->out_sod_func().set(FUNC(cit220_state::sod_w)); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(24553200, 1580, 0, 1320, 259, 0, 240); // dot clock guessed m_screen->set_screen_update("avdc", FUNC(scn2674_device::screen_update)); scn2674_device &avdc(SCN2674(config, "avdc", 24553200 / 10)); avdc.intr_callback().set_inputline(m_maincpu, I8085_RST65_LINE); avdc.set_character_width(10); avdc.set_display_callback(FUNC(cit220_state::draw_character)); avdc.set_addrmap(0, &cit220_state::char_map); avdc.set_addrmap(1, &cit220_state::attr_map); avdc.set_screen(m_screen); scn2681_device &duart(SCN2681(config, "duart", 3686400)); duart.irq_cb().set_inputline("maincpu", I8085_RST55_LINE); duart.outport_cb().set("usart", FUNC(i8251_device::write_txc)).bit(3); // 9600 baud? duart.outport_cb().append("usart", FUNC(i8251_device::write_rxc)).bit(3); I8251(config, "usart", 3000000); mcs48_cpu_device &kbdmcu(I8035(config, "kbdmcu", 4608000)); kbdmcu.set_addrmap(AS_PROGRAM, &cit220_state::keyboard_map); kbdmcu.set_addrmap(AS_IO, &cit220_state::kbd_io_map); }
void pg685_state::pg685_module(machine_config &config) { FD1797(config, m_fdc, XTAL(4'000'000) / 2); // divider guessed m_fdc->intrq_wr_callback().set("mainpic", FUNC(pic8259_device::ir4_w)); I8255(config, "modppi1", 0); I8255(config, "modppi2", 0); I8251(config, "moduart", XTAL(4'000'000) / 2); // divider guessed MM58167(config, "rtc", XTAL(32'768)); }
void v550_state::v550(machine_config &config) { Z80(config, m_maincpu, 34.846_MHz_XTAL / 16); // NEC D780C (2.177875 MHz verified) m_maincpu->set_addrmap(AS_PROGRAM, &v550_state::mem_map); m_maincpu->set_addrmap(AS_IO, &v550_state::io_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // NEC D444C-2 + battery upd7220_device &gdc(UPD7220(config, "gdc", 34.846_MHz_XTAL / 16)); // NEC D7220D (2.177875 MHz verified) gdc.set_screen("screen"); I8255(config, "ppi"); // NEC D8255AC-5 I8251(config, m_usart, 34.846_MHz_XTAL / 16); // NEC D8251AC m_usart->rxrdy_handler().set("mainint", FUNC(input_merger_device::in_w<1>)); upd7201_new_device& mpsc(UPD7201_NEW(config, "mpsc", 34.846_MHz_XTAL / 16)); // NEC D7201C mpsc.out_int_callback().set("mainint", FUNC(input_merger_device::in_w<0>)); INPUT_MERGER_ANY_HIGH(config, "mainint").output_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0); com8116_device &brg1(COM8116(config, "brg1", 5068800)); // actually SMC COM8116T-020 (unknown clock) brg1.ft_handler().set("mpsc", FUNC(upd7201_new_device::txca_w)); brg1.fr_handler().set("mpsc", FUNC(upd7201_new_device::rxca_w)); com8116_device &brg2(COM8116(config, "brg2", 5068800)); // actually SMC COM8116T-020 brg2.ft_handler().set("mpsc", FUNC(upd7201_new_device::txcb_w)); brg2.ft_handler().append("mpsc", FUNC(upd7201_new_device::rxcb_w)); brg2.fr_handler().set("usart", FUNC(i8251_device::write_txc)); brg2.fr_handler().append("usart", FUNC(i8251_device::write_rxc)); mcs48_cpu_device &kbdmcu(I8035(config, "kbdmcu", 4'608'000)); kbdmcu.set_addrmap(AS_PROGRAM, &v550_state::kbd_map); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(34.846_MHz_XTAL, 19 * 102, 0, 19 * 80, 295, 0, 272); m_screen->set_screen_update(FUNC(v550_state::screen_update)); scn2672_device &pvtc(SCN2672(config, "pvtc", 34.846_MHz_XTAL / 19)); pvtc.set_addrmap(0, &v550_state::pvtc_char_map); pvtc.set_addrmap(1, &v550_state::pvtc_attr_map); pvtc.set_character_width(19); pvtc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); pvtc.set_screen("screen"); // SCB2673 clock verified at 17.423 MHz }
void imsai_state::imsai(machine_config &config) { /* basic machine hardware */ I8085A(config, m_maincpu, XTAL(6'000'000)); m_maincpu->set_addrmap(AS_PROGRAM, &imsai_state::imsai_mem); m_maincpu->set_addrmap(AS_IO, &imsai_state::imsai_io); /* video hardware */ GENERIC_TERMINAL(config, m_terminal, 0); m_terminal->set_keyboard_callback(FUNC(imsai_state::kbd_put)); /* Devices */ I8251(config, "uart", 0); PIT8253(config, m_pit, 0); m_pit->set_clk<0>(6_MHz_XTAL / 3); // Timer 0: baud rate gen for 8251 m_pit->out_handler<0>().set("uart", FUNC(i8251_device::write_txc)); m_pit->out_handler<0>().append("uart", FUNC(i8251_device::write_rxc)); m_pit->set_clk<1>(6_MHz_XTAL / 3); // Timer 1: user m_pit->set_clk<2>(6_MHz_XTAL / 3); // Timer 2: user }
INPUT_PORTS_END void ec7915_state::ec7915(machine_config &config) { I8080A(config, m_maincpu, 2000000); // КР580ВМ80А (not Z80) + SAB8224P clock generator m_maincpu->set_addrmap(AS_PROGRAM, &ec7915_state::mem_map); m_maincpu->set_addrmap(AS_IO, &ec7915_state::io_map); //I8214(config, "picu", 2000000); // CEMI UCY74S414 PIT8253(config, "pit", 0); // КР580ВИ53 I8251(config, "usart", 2000000); // КР580ВВ51А // 8251 usage appears to prefer synchronous communications // 2x NEC D8255AC-2 on main board + КР580ВВ55А on display board I8255A(config, "ppi1"); I8255A(config, "ppi2"); I8255A(config, "ppi3"); }
void konin_state::konin(machine_config &config) { /* basic machine hardware */ i8080_cpu_device &maincpu(I8080(config, m_maincpu, XTAL(4'000'000))); maincpu.set_addrmap(AS_PROGRAM, &konin_state::konin_mem); maincpu.set_addrmap(AS_IO, &konin_state::konin_io); maincpu.out_inte_func().set(m_picu, FUNC(i8214_device::inte_w)); maincpu.set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(i8212_device::inta_cb), "intlatch", (i8212_device*)nullptr)); i8212_device &intlatch(I8212(config, "intlatch", 0)); intlatch.md_rd_callback().set_constant(0); intlatch.di_rd_callback().set(m_picu, FUNC(i8214_device::vector_r)); intlatch.int_wr_callback().set_inputline("maincpu", I8085_INTR_LINE); I8214(config, m_picu, XTAL(4'000'000)); m_picu->int_wr_callback().set("intlatch", FUNC(i8212_device::stb_w)); pit8253_device &mainpit(PIT8253(config, "mainpit", 0)); // wild guess at UART clock and source mainpit.set_clk<0>(1536000); mainpit.out_handler<0>().set("uart", FUNC(i8251_device::write_txc)); mainpit.out_handler<0>().append("uart", FUNC(i8251_device::write_rxc)); I8255(config, "mainppi", 0); PIT8253(config, m_iopit, 0); I8255(config, m_ioppi, 0); 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)); uart.rxrdy_handler().set(FUNC(konin_state::picu_r3_w)); rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); 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)); }
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ MCFG_SCREEN_SIZE(600, 352) MCFG_SCREEN_VISIBLE_AREA(0, 40*12-1, 0, 16*16-1) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_tim100 ) MCFG_DEVICE_ADD("crtc", I8276, XTAL(4'915'200)) MCFG_I8275_CHARACTER_WIDTH(12) MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(tim100_state, crtc_display_pixels) MCFG_I8275_DRQ_CALLBACK(WRITELINE(*this, tim100_state, drq_w)) MCFG_I8275_IRQ_CALLBACK(WRITELINE(*this, tim100_state, irq_w)) MCFG_VIDEO_SET_SCREEN("screen") MCFG_PALETTE_ADD("palette", 3) i8251_device &uart_u17(I8251(config, "uart_u17", 0)); uart_u17.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); uart_u17.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr)); uart_u17.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "keyboard")); rs232.rxd_handler().set("uart_u17", FUNC(i8251_device::write_rxd)); rs232.dsr_handler().set("uart_u17", FUNC(i8251_device::write_dsr)); rs232.cts_handler().set("uart_u17", FUNC(i8251_device::write_cts)); rs232.set_option_device_input_defaults("keyboard", DEVICE_INPUT_DEFAULTS_NAME(tim100)); i8251_device &uart_u18(I8251(config, "uart_u18", 0)); uart_u18.txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd)); uart_u18.dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr)); uart_u18.rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts));
void zorba_state::zorba(machine_config &config) { // basic machine hardware Z80(config, m_maincpu, 24_MHz_XTAL / 6); m_maincpu->set_addrmap(AS_PROGRAM, &zorba_state::zorba_mem); m_maincpu->set_addrmap(AS_IO, &zorba_state::zorba_io); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_color(rgb_t::green()); screen.set_refresh_hz(50); screen.set_screen_update("crtc", FUNC(i8275_device::screen_update)); GFXDECODE(config, "gfxdecode", m_palette, gfx_zorba); PALETTE(config, m_palette, palette_device::MONOCHROME_HIGHLIGHT); /* sound hardware */ SPEAKER(config, "mono").front_center(); BEEP(config, m_beep, 800).add_route(ALL_OUTPUTS, "mono", 1.00); // should be horizontal frequency / 16, so depends on CRTC parameters INPUT_MERGER_ANY_HIGH(config, "irq0").output_handler().set(FUNC(zorba_state::irq_w<0>)); INPUT_MERGER_ANY_HIGH(config, "irq1").output_handler().set(FUNC(zorba_state::irq_w<1>)); INPUT_MERGER_ANY_HIGH(config, "irq2").output_handler().set(FUNC(zorba_state::irq_w<2>)); /* devices */ Z80DMA(config, m_dma, 24_MHz_XTAL / 6); // busack on cpu connects to bai pin m_dma->out_busreq_callback().set(FUNC(zorba_state::busreq_w)); //connects to busreq on cpu m_dma->out_int_callback().set("irq0", FUNC(input_merger_device::in_w<0>)); //ba0 - not connected m_dma->in_mreq_callback().set(FUNC(zorba_state::memory_read_byte)); m_dma->out_mreq_callback().set(FUNC(zorba_state::memory_write_byte)); m_dma->in_iorq_callback().set(FUNC(zorba_state::io_read_byte)); m_dma->out_iorq_callback().set(FUNC(zorba_state::io_write_byte)); I8251(config, m_uart0, 0); // U32 COM port J2 m_uart0->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); // TODO: this line has a LED attached m_uart0->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr)); m_uart0->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); m_uart0->rxrdy_handler().set(FUNC(zorba_state::tx_rx_rdy_w<1>)); m_uart0->txrdy_handler().set(FUNC(zorba_state::tx_rx_rdy_w<0>)); I8251(config, m_uart1, 0); // U31 printer port J3 m_uart1->txd_handler().set("serprn", FUNC(rs232_port_device::write_txd)); m_uart1->rts_handler().set("serprn", FUNC(rs232_port_device::write_rts)); m_uart1->rxrdy_handler().set(FUNC(zorba_state::tx_rx_rdy_w<3>)); m_uart1->txrdy_handler().set(FUNC(zorba_state::tx_rx_rdy_w<2>)); I8251(config, m_uart2, 0); // U30 serial keyboard J6 m_uart2->txd_handler().set("keyboard", FUNC(zorba_keyboard_device::txd_w)); m_uart2->rxrdy_handler().set(FUNC(zorba_state::tx_rx_rdy_w<5>)); m_uart2->txrdy_handler().set(FUNC(zorba_state::tx_rx_rdy_w<4>)); // port A - disk select etc, beeper // port B - parallel interface PIA6821(config, m_pia0, 0); m_pia0->writepa_handler().set(FUNC(zorba_state::pia0_porta_w)); m_pia0->writepb_handler().set("parprndata", FUNC(output_latch_device::bus_w)); m_pia0->cb2_handler().set("parprn", FUNC(centronics_device::write_strobe)); // IEEE488 interface PIA6821(config, m_pia1, 0); m_pia1->readpa_handler().set(m_ieee, FUNC(ieee488_device::dio_r)); // TODO: gated with PB1 m_pia1->writepa_handler().set(m_ieee, FUNC(ieee488_device::host_dio_w)); // TODO: gated with PB1 m_pia1->readpb_handler().set(FUNC(zorba_state::pia1_portb_r)); m_pia1->writepb_handler().set(FUNC(zorba_state::pia1_portb_w)); m_pia1->ca2_handler().set(m_ieee, FUNC(ieee488_device::host_ifc_w)); m_pia1->cb2_handler().set(m_ieee, FUNC(ieee488_device::host_ren_w)); m_pia1->irqa_handler().set("irq1", FUNC(input_merger_device::in_w<0>)); m_pia1->irqb_handler().set("irq1", FUNC(input_merger_device::in_w<1>)); // PIT pit8254_device &pit(PIT8254(config, "pit", 0)); pit.set_clk<0>(24_MHz_XTAL / 3); pit.set_clk<1>(24_MHz_XTAL / 3); pit.set_clk<2>(24_MHz_XTAL / 3); pit.out_handler<0>().set(FUNC(zorba_state::br1_w)); pit.out_handler<1>().set(m_uart1, FUNC(i8251_device::write_txc)); pit.out_handler<1>().append(m_uart1, FUNC(i8251_device::write_rxc)); pit.out_handler<2>().set(m_uart2, FUNC(i8251_device::write_txc)); pit.out_handler<2>().append(m_uart2, FUNC(i8251_device::write_rxc)); // CRTC I8275(config, m_crtc, 14.318'181_MHz_XTAL / 7); m_crtc->set_character_width(8); m_crtc->set_display_callback(FUNC(zorba_state::zorba_update_chr), this); m_crtc->drq_wr_callback().set(m_dma, FUNC(z80dma_device::rdy_w)); m_crtc->irq_wr_callback().set("irq0", FUNC(input_merger_device::in_w<1>)); m_crtc->set_screen("screen"); // Floppies FD1793(config, m_fdc, 24_MHz_XTAL / 24); m_fdc->intrq_wr_callback().set("irq2", FUNC(input_merger_device::in_w<0>)); m_fdc->drq_wr_callback().set("irq2", FUNC(input_merger_device::in_w<1>)); FLOPPY_CONNECTOR(config, m_floppy0, zorba_floppies, "525dd", floppy_image_device::default_floppy_formats).enable_sound(true); FLOPPY_CONNECTOR(config, m_floppy1, zorba_floppies, "525dd", floppy_image_device::default_floppy_formats).enable_sound(true); // J1 IEEE-488 IEEE488(config, m_ieee); m_ieee->srq_callback().set(m_pia1, FUNC(pia6821_device::ca2_w)); // TODO: gated with PB1 from PIA // J2 EIA RS232/internal modem // TODO: this has additional lines compared to a regular RS232 port (TxC in, RxC in, RxC out, speaker in, power) rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr)); rs232.rxd_handler().set(m_uart0, FUNC(i8251_device::write_rxd)); // TODO: this line has a LED attached rs232.cts_handler().set(m_uart0, FUNC(i8251_device::write_cts)); // TODO: this line has a LED attached rs232.dsr_handler().set(m_uart0, FUNC(i8251_device::write_dsr)); // J3 Parallel printer centronics_device &parprn(CENTRONICS(config, "parprn", centronics_devices, "printer")); parprn.busy_handler().set(m_uart1, FUNC(i8251_device::write_cts)); parprn.busy_handler().append(m_uart1, FUNC(i8251_device::write_dsr)); // TODO: shared with serial CTS parprn.fault_handler().set(FUNC(zorba_state::printer_fault_w)); parprn.select_handler().set(FUNC(zorba_state::printer_select_w)); output_latch_device &parprndata(OUTPUT_LATCH(config, "parprndata")); parprn.set_output_latch(parprndata); // J3 Serial printer rs232_port_device &serprn(RS232_PORT(config, "serprn", default_rs232_devices, nullptr)); serprn.rxd_handler().set(m_uart1, FUNC(i8251_device::write_rxd)); // TODO: this line has a LED attached // J6 TTL-level serial keyboard ZORBA_KEYBOARD(config, "keyboard").rxd_cb().set(m_uart2, FUNC(i8251_device::write_rxd)); SOFTWARE_LIST(config, "flop_list").set_original("zorba"); }
//config.set_default_layout(layout_votrpss); /* sound hardware */ SPEAKER(config, "mono").front_center(); MCFG_DEVICE_ADD("ay", AY8910, XTAL(8'000'000)/4) /* 2.000 MHz, verified */ MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW1")) // port B read MCFG_AY8910_PORT_A_WRITE_CB(WRITE8("votrax", votrax_sc01_device, write)) // port A write MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_DEVICE_ADD("votrax", VOTRAX_SC01, 720000) /* 720 kHz? needs verify */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) /* Devices */ MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(votrpss_state, kbd_put)) 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)); // when serial is chosen, and you select terminal, nothing shows (by design). You can only type commands in. 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)); pit8253_device &pit(PIT8253(config, "pit", 0)); pit.set_clk<0>(8_MHz_XTAL); // Timer 0: baud rate gen for 8251 pit.out_handler<0>().set("uart", FUNC(i8251_device::write_txc)); pit.out_handler<0>().append("uart", FUNC(i8251_device::write_rxc)); pit.set_clk<1>(8_MHz_XTAL / 256); // Timer 1: Pitch
/* Machine driver */ void b2m_state::b2m(machine_config &config) { /* basic machine hardware */ I8080(config, m_maincpu, 2000000); m_maincpu->set_addrmap(AS_PROGRAM, &b2m_state::b2m_mem); m_maincpu->set_addrmap(AS_IO, &b2m_state::b2m_io); m_maincpu->set_vblank_int("screen", FUNC(b2m_state::b2m_vblank_interrupt)); m_maincpu->set_irq_acknowledge_callback("pic8259", FUNC(pic8259_device::inta_cb)); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(50); screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_size(384, 256); screen.set_visarea_full(); screen.set_screen_update(FUNC(b2m_state::screen_update_b2m)); screen.set_palette(m_palette); PALETTE(config, m_palette, FUNC(b2m_state::b2m_palette), 4); PIT8253(config, m_pit, 0); m_pit->set_clk<0>(0); m_pit->out_handler<0>().set(m_pic, FUNC(pic8259_device::ir1_w)); m_pit->set_clk<1>(2000000); m_pit->out_handler<1>().set(FUNC(b2m_state::bm2_pit_out1)); m_pit->set_clk<2>(2000000); m_pit->out_handler<2>().set(m_pit, FUNC(pit8253_device::write_clk0)); i8255_device &ppi1(I8255(config, "ppi8255_1")); ppi1.out_pa_callback().set(FUNC(b2m_state::b2m_8255_porta_w)); ppi1.in_pb_callback().set(FUNC(b2m_state::b2m_8255_portb_r)); ppi1.out_pb_callback().set(FUNC(b2m_state::b2m_8255_portb_w)); ppi1.out_pc_callback().set(FUNC(b2m_state::b2m_8255_portc_w)); i8255_device &ppi2(I8255(config, "ppi8255_2")); ppi2.out_pc_callback().set(FUNC(b2m_state::b2m_ext_8255_portc_w)); i8255_device &ppi3(I8255(config, "ppi8255_3")); ppi3.in_pa_callback().set(FUNC(b2m_state::b2m_romdisk_porta_r)); ppi3.out_pb_callback().set(FUNC(b2m_state::b2m_romdisk_portb_w)); ppi3.out_pc_callback().set(FUNC(b2m_state::b2m_romdisk_portc_w)); PIC8259(config, m_pic, 0); m_pic->out_int_callback().set_inputline(m_maincpu, 0); /* sound */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); /* uart */ I8251(config, "uart", 0); FD1793(config, m_fdc, 8_MHz_XTAL / 8); m_fdc->drq_wr_callback().set(FUNC(b2m_state::b2m_fdc_drq)); FLOPPY_CONNECTOR(config, "fd0", b2m_floppies, "525qd", b2m_state::b2m_floppy_formats); FLOPPY_CONNECTOR(config, "fd1", b2m_floppies, "525qd", b2m_state::b2m_floppy_formats); SOFTWARE_LIST(config, "flop_list").set_original("b2m"); /* internal ram */ RAM(config, RAM_TAG).set_default_size("128K").set_default_value(0x00); }
DEVICE_INPUT_DEFAULTS_END void isbc8010_state::isbc8010(machine_config &config) { /* basic machine hardware */ I8080A(config, m_maincpu, XTAL(18'432'000)/9); m_maincpu->set_addrmap(AS_PROGRAM, &isbc8010_state::isbc8010_mem); m_maincpu->set_addrmap(AS_IO, &isbc8010_state::isbc8010_io); I8251(config, m_usart, 0); m_usart->txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd)); m_usart->dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr)); m_usart->rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts)); I8255A(config, m_ppi_0); I8255A(config, m_ppi_1); RS232_PORT(config, m_rs232, default_rs232_devices, "terminal"); m_rs232->rxd_handler().set(m_usart, FUNC(i8251_device::write_rxd)); m_rs232->dsr_handler().set(m_usart, FUNC(i8251_device::write_dsr)); m_rs232->cts_handler().set(m_usart, FUNC(i8251_device::write_cts)); m_rs232->set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); clock_device &usart_clock(CLOCK(config, "usart_clock", XTAL(18'432'000)/60)); usart_clock.signal_handler().set(FUNC(isbc8010_state::usart_clock_tick)); /* video hardware */ // 96364 crt controller // screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // screen.set_refresh_hz(60); /* Video is blanked for 70 out of 262 scanlines per refresh cycle. Each scanline is composed of 65 character times, 40 of which are visible, and each character time is 7 dot times; a dot time is 2 cycles of the fundamental 14.31818 MHz oscillator. The total blanking time is about 4450 microseconds. */ // screen.set_vblank_time(ATTOSECONDS_IN_USEC((int) (70 * 65 * 7 * 2 / 14.31818))); /* It would be nice if we could implement some sort of display overscan here. */ // screen.set_size(40 * 7, 24 * 8); // screen.set_visarea(0, 40 * 7 - 1, 0, 24 * 8 - 1); // screen.set_screen_update(FUNC(sdk80_state::screen_update)); // screen.set_palette("palette"); // GFXDECODE(config, "gfxdecode", "palette", gfx_sdk80); // PALETTE(config, "palette", palette_device::MONOCHROME); // Video board UART // ay31015_device &hd6402(AY31015(config, "hd6402", 0)); // MCFG_AY31015_TX_CLOCK(( XTAL(16'000'000) / 16 ) / 256) // MCFG_AY31015_RX_CLOCK(( XTAL(16'000'000) / 16 ) / 256) // hd6402.read_si_callback().set(FUNC(sdk80_state::nascom1_hd6402_si)); // hd6402.write_so_callback().set(FUNC(sdk80_state::nascom1_hd6402_so)); // clock_device &uart_clock(CLOCK(config, "uart_clock", (XTAL(16'000'000) / 16) / 256)); // uart_clock.signal_handler().set("hd6402", FUNC(ay31015_device::write_tcp)); // uart_clock.signal_handler().append("hd6402", FUNC(ay31015_device::write_rcp)); /* Devices */ // i8279_device &kbdc(I8279(config, "i8279", 3100000)); // based on divider // kbdc.out_irq_callback().set_inputline("maincpu", I8085_RST55_LINE); // irq // kbdc.out_sl_callback().set(FUNC(sdk80_state::scanlines_w)); // scan SL lines // kbdc.out_disp_callback().set(FUNC(sdk80_state::digit_w)); // display A&B // kbdc.in_rl_callback().set(FUNC(sdk80_state::kbd_r)); // kbd RL lines // kbdc.in_shift_callback().set_constant(1); // Shift key // kbdc.in_ctrl_callback().set_constant(1); }
/* basic machine hardware */ MCFG_DEVICE_ADD(Z80_TAG, Z80, 4000000) // NEC uPD70008C MCFG_DEVICE_PROGRAM_MAP(pc8401a_mem) MCFG_DEVICE_IO_MAP(pc8401a_io) /* fake keyboard */ TIMER(config, "keyboard").configure_periodic(FUNC(pc8401a_state::pc8401a_keyboard_tick), attotime::from_hz(64)); /* devices */ UPD1990A(config, m_rtc); i8255_device &ppi(I8255A(config, I8255A_TAG)); ppi.in_pc_callback().set(FUNC(pc8401a_state::ppi_pc_r)); ppi.out_pc_callback().set(FUNC(pc8401a_state::ppi_pc_w)); i8251_device &uart(I8251(config, I8251_TAG, 0)); uart.txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd)); uart.dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr)); uart.rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts)); rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr)); rs232.rxd_handler().set(I8251_TAG, FUNC(i8251_device::write_rxd)); rs232.dsr_handler().set(I8251_TAG, FUNC(i8251_device::write_dsr)); /* video hardware */ pc8401a_video(config); /* option ROM cartridge */ MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, nullptr) MCFG_GENERIC_EXTENSIONS("bin,rom")