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); }