void dsb46_state::dsb46(machine_config &config) { // basic machine hardware Z80(config, m_maincpu, 24_MHz_XTAL / 6); m_maincpu->set_addrmap(AS_PROGRAM, &dsb46_state::dsb46_mem); m_maincpu->set_addrmap(AS_IO, &dsb46_state::dsb46_io); m_maincpu->set_daisy_config(daisy_chain); /* Devices */ z80sio_device& sio(Z80SIO(config, "sio", 24_MHz_XTAL / 6)); sio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); sio.out_txda_callback().set("rs232", FUNC(rs232_port_device::write_txd)); sio.out_dtra_callback().set("rs232", FUNC(rs232_port_device::write_dtr)); sio.out_rtsa_callback().set("rs232", FUNC(rs232_port_device::write_rts)); rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); rs232.rxd_handler().set("sio", FUNC(z80sio_device::rxa_w)); rs232.cts_handler().set("sio", FUNC(z80sio_device::ctsa_w)); z80ctc_device &ctc1(Z80CTC(config, "ctc1", 24_MHz_XTAL / 6)); ctc1.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); ctc1.set_clk<0>(1.8432_MHz_XTAL); ctc1.zc_callback<0>().set("sio", FUNC(z80sio_device::rxca_w)); ctc1.zc_callback<0>().append("sio", FUNC(z80sio_device::txca_w)); ctc1.set_clk<2>(1.8432_MHz_XTAL); ctc1.zc_callback<2>().set("sio", FUNC(z80sio_device::rxcb_w)); ctc1.zc_callback<2>().append("sio", FUNC(z80sio_device::txcb_w)); }
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 harriet_state::harriet(machine_config &config) { M68010(config, m_maincpu, 40_MHz_XTAL / 4); // MC68010FN10 m_maincpu->set_addrmap(AS_PROGRAM, &harriet_state::harriet_map); MC68681(config, "duart", 3.6864_MHz_XTAL); mc68901_device &mfp(MC68901(config, "mfp", 40_MHz_XTAL / 16)); mfp.set_timer_clock(2.4576_MHz_XTAL); mfp.set_rx_clock(9600); mfp.set_tx_clock(9600); mfp.out_so_cb().set("rs232", FUNC(rs232_port_device::write_txd)); //mfp.out_tco_cb().set("mfp", FUNC(mc68901_device::rc_w)); //mfp.out_tdo_cb().set("mfp", FUNC(mc68901_device::tc_w)); HD63450(config, "dmac", 40_MHz_XTAL / 4, "maincpu"); // MC68450R10 (or HD68450Y-10) M48T02(config, "timekpr"); NVRAM(config, "zpram", nvram_device::DEFAULT_ALL_0); // MK48Z02 rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); rs232.rxd_handler().set("mfp", FUNC(mc68901_device::write_rx)); rs232.rxd_handler().append("mfp", FUNC(mc68901_device::tbi_w)); NSCSI_BUS(config, "scsia"); NSCSI_CONNECTOR(config, "scsia:7").option_set("wdc", WD33C93A).clock(40_MHz_XTAL / 4); //WD33C93(config, "wdcb", 40_MHz_XTAL / 4); //IMSC012(config, "c012", 40_MHz_XTAL / 8); // INMOS IMSC012-P20S link adaptor }
INT read_trigger_event(char *pevent, INT off) { WORD *pdata, a; INT j; /* init bank structure */ bk_init(pevent); /* create structured ADC0 bank */ bk_create(pevent, "ADC0", TID_WORD, &pdata); /* Use following code to "simulate" data */ for (a = 0; a < 3; a++) *pdata++ = rand() % 1024; rs232(CMD_GETS, info, strin, 256, 0, 500); for (j=0;j<256;j++) { if (strin[j] != 0) *pdata++ = strin[j]; } bk_close(pevent, pdata); /* create variable length TDC bank */ bk_create(pevent, "TDC0", TID_WORD, &pdata); /* Use following code to "simulate" data */ for (a = 0; a < 3; a++) *pdata++ = rand() % 1024; bk_close(pevent, pdata); return bk_size(pevent); }
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 }
GFXDECODE_END void c900_state::c900(machine_config &config) { /* basic machine hardware */ Z8001(config, m_maincpu, 12_MHz_XTAL / 2); m_maincpu->set_addrmap(AS_PROGRAM, &c900_state::mem_map); m_maincpu->set_addrmap(AS_DATA, &c900_state::data_map); m_maincpu->set_addrmap(AS_IO, &c900_state::io_map); m_maincpu->set_addrmap(z8001_device::AS_SIO, &c900_state::special_io_map); M6508(config, m_fdcpu, 12_MHz_XTAL / 8); // PH1/PH2 = 1.5 MHz m_fdcpu->set_addrmap(AS_PROGRAM, &c900_state::fdc_map); GFXDECODE(config, "gfxdecode", "palette", gfx_c900); PALETTE(config, "palette", palette_device::MONOCHROME); z8036_device &cio(Z8036(config, "cio", 12_MHz_XTAL / 16)); // SNDCLK = 750kHz cio.pb_wr_cb().set(FUNC(c900_state::sound_pb_w)); scc8030_device &scc(SCC8030(config, "scc", 12_MHz_XTAL / 2)); // 5'850'000 is the ideal figure /* Port B */ scc.out_txdb_callback().set("rs232", FUNC(rs232_port_device::write_txd)); scc.out_dtrb_callback().set("rs232", FUNC(rs232_port_device::write_dtr)); scc.out_rtsb_callback().set("rs232", FUNC(rs232_port_device::write_rts)); //scc.out_int_callback().set("rs232", FUNC(c900_state::scc_int)); rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); rs232.rxd_handler().set("scc", FUNC(scc8030_device::rxb_w)); rs232.cts_handler().set("scc", FUNC(scc8030_device::ctsb_w)); SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_spkrdev).add_route(ALL_OUTPUTS, "mono", 0.05); }
void coco_rs232_device::device_add_mconfig(machine_config &config) { MOS6551(config, m_uart, 0); m_uart->set_xtal(1.8432_MHz_XTAL); m_uart->irq_handler().set(FUNC(coco_rs232_device::uart_irq_w)); m_uart->txd_handler().set(PORT_TAG, FUNC(rs232_port_device::write_txd)); rs232_port_device &rs232(RS232_PORT(config, PORT_TAG, default_rs232_devices, nullptr)); rs232.rxd_handler().set(m_uart, FUNC(mos6551_device::write_rxd)); rs232.dcd_handler().set(m_uart, FUNC(mos6551_device::write_dcd)); rs232.dsr_handler().set(m_uart, FUNC(mos6551_device::write_dsr)); rs232.cts_handler().set(m_uart, FUNC(mos6551_device::write_cts)); }
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)); }
int main() { RS232_INFO info; char str[10000]; printf("Enter port [/dev/ttyS0]: "); fgets(str, sizeof(str), stdin); if (strchr(str, '\n')) *strchr(str, '\n') = 0; if (!str[0]) strcpy(str, "/dev/ttyS0"); info.fd = rs232_open(str, 9600, 'N', 8, 1, 0); if (info.fd < 0) { printf("Cannot open ttyS0\n"); return 0; } /* turn on debugging, will go to rs232.log */ rs232(CMD_DEBUG, TRUE); printf("Connected to ttyS0, exit with <ESC>\n"); do { memset(str, 0, sizeof(str)); str[0] = ss_getchar(0); if (str[0] == 27) break; if (str[0] > 0) rs232_puts(&info, str); rs232_gets(&info, str, sizeof(str), "", 10); printf(str); fflush(stdout); } while (1); ss_getchar(TRUE); rs232_exit(&info); return 1; }
DEVICE_INPUT_DEFAULTS_END //------------------------------------------------- // device_add_mconfig - add device-specific // machine configuration //------------------------------------------------- void ss50_mps_device::device_add_mconfig(machine_config &config) { ACIA6850(config, m_acia, 0); m_acia->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); //m_acia->rts_handler().set(FUNC(ss50_mps_device::reader_control_w)); m_acia->irq_handler().set(FUNC(ss50_mps_device::acia_irq_w)); rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); rs232.rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd)); rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); }
INT frontend_init() { /* hardware initialization */ INT status; char set_str[80]; /* Book Setting space */ TRIGGER_SETTINGS_STR(trigger_settings_str); /* Map /equipment/Trigger/settings for the sequencer */ sprintf(set_str, "/Equipment/Trigger/Settings"); status = db_create_record(hDB, 0, set_str, strcomb(trigger_settings_str)); status = db_find_key (hDB, 0, set_str, &hSet); if (status != DB_SUCCESS) cm_msg(MINFO,"FE","Key %s not found", set_str); rs232(CMD_INIT, hSet, &info); /* print message and return FE_ERR_HW if frontend should not be started */ return SUCCESS; }
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)); }
void pulsar_state::pulsar(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, 4_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &pulsar_state::mem_map); m_maincpu->set_addrmap(AS_IO, &pulsar_state::io_map); m_maincpu->set_daisy_config(daisy_chain_intf); /* Devices */ i8255_device &ppi(I8255(config, "ppi")); ppi.out_pa_callback().set(FUNC(pulsar_state::ppi_pa_w)); ppi.out_pb_callback().set(FUNC(pulsar_state::ppi_pb_w)); ppi.in_pc_callback().set(FUNC(pulsar_state::ppi_pc_r)); ppi.out_pc_callback().set(FUNC(pulsar_state::ppi_pc_w)); MSM5832(config, "rtc", 32.768_kHz_XTAL); z80dart_device& dart(Z80DART(config, "dart", 4_MHz_XTAL)); dart.out_txda_callback().set("rs232", FUNC(rs232_port_device::write_txd)); dart.out_dtra_callback().set("rs232", FUNC(rs232_port_device::write_dtr)); dart.out_rtsa_callback().set("rs232", FUNC(rs232_port_device::write_rts)); dart.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); rs232.rxd_handler().set("dart", FUNC(z80dart_device::rxa_w)); rs232.cts_handler().set("dart", FUNC(z80dart_device::ctsa_w)); rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); com8116_device &brg(COM8116(config, "brg", 5.0688_MHz_XTAL)); // Schematic has the labels for FT and FR the wrong way around, but the pin numbers are correct. brg.fr_handler().set("dart", FUNC(z80dart_device::txca_w)); brg.fr_handler().append("dart", FUNC(z80dart_device::rxca_w)); brg.ft_handler().set("dart", FUNC(z80dart_device::txcb_w)); brg.ft_handler().append("dart", FUNC(z80dart_device::rxcb_w)); FD1797(config, m_fdc, 4_MHz_XTAL / 2); FLOPPY_CONNECTOR(config, "fdc:0", pulsar_floppies, "flop", floppy_image_device::default_floppy_formats).enable_sound(true); FLOPPY_CONNECTOR(config, "fdc:1", pulsar_floppies, "flop", floppy_image_device::default_floppy_formats).enable_sound(true); }
void altair_state::altair(machine_config &config) { /* basic machine hardware */ I8080(config, m_maincpu, 2_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &altair_state::mem_map); m_maincpu->set_addrmap(AS_IO, &altair_state::io_map); /* video hardware */ acia6850_device &acia(ACIA6850(config, "acia", 0)); acia.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); 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("acia", FUNC(acia6850_device::write_rxd)); rs232.dcd_handler().set("acia", FUNC(acia6850_device::write_dcd)); rs232.cts_handler().set("acia", FUNC(acia6850_device::write_cts)); clock_device &uart_clock(CLOCK(config, "uart_clock", 153600)); // TODO: this is set using jumpers S3/S2/S1/S0 uart_clock.signal_handler().set("acia", FUNC(acia6850_device::write_txc)); uart_clock.signal_handler().append("acia", FUNC(acia6850_device::write_rxc)); /* quickload */ QUICKLOAD(config, "quickload", 0).set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(altair_state, altair), this), "bin", 0); }
void pc1640_state::pc1640(machine_config &config) { I8086(config, m_maincpu, 24_MHz_XTAL / 3); m_maincpu->set_addrmap(AS_PROGRAM, &pc1640_state::pc1640_mem); m_maincpu->set_addrmap(AS_IO, &pc1640_state::pc1640_io); m_maincpu->set_irq_acknowledge_callback(I8259A2_TAG, FUNC(pic8259_device::inta_cb)); // sound SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.80); // devices PC1512_KEYBOARD(config, m_kb, 0); m_kb->clock_wr_callback().set(FUNC(pc1512_base_state::kbclk_w)); m_kb->data_wr_callback().set(FUNC(pc1512_base_state::kbdata_w)); pc1512_mouse_port_device &mouse(PC1512_MOUSE_PORT(config, PC1512_MOUSE_PORT_TAG, pc1512_mouse_port_devices, "mouse")); mouse.x_wr_callback().set(FUNC(pc1512_base_state::mouse_x_w)); mouse.y_wr_callback().set(FUNC(pc1512_base_state::mouse_y_w)); mouse.m1_wr_callback().set(m_kb, FUNC(pc1512_keyboard_device::m1_w)); mouse.m2_wr_callback().set(m_kb, FUNC(pc1512_keyboard_device::m2_w)); AM9517A(config, m_dmac, 24_MHz_XTAL / 6); m_dmac->out_hreq_callback().set(FUNC(pc1640_state::hrq_w)); m_dmac->out_eop_callback().set(FUNC(pc1640_state::eop_w)); m_dmac->in_memr_callback().set(FUNC(pc1640_state::memr_r)); m_dmac->out_memw_callback().set(FUNC(pc1640_state::memw_w)); m_dmac->in_ior_callback<1>().set(FUNC(pc1640_state::ior1_r)); m_dmac->in_ior_callback<2>().set(FUNC(pc1640_state::ior2_r)); m_dmac->in_ior_callback<3>().set(FUNC(pc1640_state::ior3_r)); m_dmac->out_iow_callback<0>().set(FUNC(pc1640_state::iow0_w)); m_dmac->out_iow_callback<1>().set(FUNC(pc1640_state::iow1_w)); m_dmac->out_iow_callback<2>().set(FUNC(pc1640_state::iow2_w)); m_dmac->out_iow_callback<3>().set(FUNC(pc1640_state::iow3_w)); m_dmac->out_dack_callback<0>().set(FUNC(pc1640_state::dack0_w)); m_dmac->out_dack_callback<1>().set(FUNC(pc1640_state::dack1_w)); m_dmac->out_dack_callback<2>().set(FUNC(pc1640_state::dack2_w)); m_dmac->out_dack_callback<3>().set(FUNC(pc1640_state::dack3_w)); PIC8259(config, m_pic, 0); m_pic->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); PIT8253(config, m_pit, 0); m_pit->set_clk<0>(28.636363_MHz_XTAL / 24); m_pit->out_handler<0>().set(m_pic, FUNC(pic8259_device::ir0_w)); m_pit->set_clk<1>(28.636363_MHz_XTAL / 24); m_pit->out_handler<1>().set(FUNC(pc1512_base_state::pit1_w)); m_pit->set_clk<2>(28.636363_MHz_XTAL / 24); m_pit->out_handler<2>().set(FUNC(pc1512_base_state::pit2_w)); MC146818(config, m_rtc, 32.768_kHz_XTAL); m_rtc->irq().set(m_pic, FUNC(pic8259_device::ir2_w)); PC_FDC_XT(config, m_fdc, 0); m_fdc->intrq_wr_callback().set(FUNC(pc1512_base_state::fdc_int_w)); m_fdc->drq_wr_callback().set(FUNC(pc1512_base_state::fdc_drq_w)); FLOPPY_CONNECTOR(config, PC_FDC_XT_TAG ":0", pc1512_floppies, "525dd", pc1512_base_state::floppy_formats); FLOPPY_CONNECTOR(config, PC_FDC_XT_TAG ":1", pc1512_floppies, nullptr, pc1512_base_state::floppy_formats); INS8250(config, m_uart, 1.8432_MHz_XTAL); m_uart->out_tx_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd)); m_uart->out_dtr_callback().set(RS232_TAG, FUNC(rs232_port_device::write_dtr)); m_uart->out_rts_callback().set(RS232_TAG, FUNC(rs232_port_device::write_rts)); m_uart->out_int_callback().set(m_pic, FUNC(pic8259_device::ir4_w)); CENTRONICS(config, m_centronics, centronics_devices, "printer"); m_centronics->ack_handler().set(FUNC(pc1512_state::write_centronics_ack)); m_centronics->busy_handler().set(FUNC(pc1512_state::write_centronics_busy)); m_centronics->perror_handler().set(FUNC(pc1512_state::write_centronics_perror)); m_centronics->select_handler().set(FUNC(pc1512_state::write_centronics_select)); m_centronics->fault_handler().set(FUNC(pc1512_state::write_centronics_fault)); OUTPUT_LATCH(config, m_cent_data_out); m_centronics->set_output_latch(*m_cent_data_out); rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr)); rs232.rxd_handler().set(m_uart, FUNC(ins8250_uart_device::rx_w)); rs232.dcd_handler().set(m_uart, FUNC(ins8250_uart_device::dcd_w)); rs232.dsr_handler().set(m_uart, FUNC(ins8250_uart_device::dsr_w)); rs232.ri_handler().set(m_uart, FUNC(ins8250_uart_device::ri_w)); rs232.cts_handler().set(m_uart, FUNC(ins8250_uart_device::cts_w)); // ISA8 bus isa8_device &isa(ISA8(config, ISA_BUS_TAG, 0)); isa.set_memspace(m_maincpu, AS_PROGRAM); isa.set_iospace(m_maincpu, AS_IO); isa.irq2_callback().set(m_pic, FUNC(pic8259_device::ir2_w)); isa.irq3_callback().set(m_pic, FUNC(pic8259_device::ir3_w)); isa.irq4_callback().set(m_pic, FUNC(pic8259_device::ir4_w)); isa.irq5_callback().set(m_pic, FUNC(pic8259_device::ir5_w)); isa.irq6_callback().set(m_pic, FUNC(pic8259_device::ir6_w)); isa.irq7_callback().set(m_pic, FUNC(pic8259_device::ir7_w)); isa.drq1_callback().set(I8237A5_TAG, FUNC(am9517a_device::dreq1_w)); isa.drq2_callback().set(I8237A5_TAG, FUNC(am9517a_device::dreq2_w)); isa.drq3_callback().set(I8237A5_TAG, FUNC(am9517a_device::dreq3_w)); ISA8_SLOT(config, "isa1", 0, ISA_BUS_TAG, pc_isa8_cards, nullptr, false); // FIXME: determine ISA bus clock ISA8_SLOT(config, "isa2", 0, ISA_BUS_TAG, pc_isa8_cards, nullptr, false); ISA8_SLOT(config, "isa3", 0, ISA_BUS_TAG, pc_isa8_cards, nullptr, false); ISA8_SLOT(config, "isa4", 0, ISA_BUS_TAG, pc_isa8_cards, nullptr, false); ISA8_SLOT(config, "isa5", 0, ISA_BUS_TAG, pc1640_isa8_cards, "iga", false); // internal ram RAM(config, RAM_TAG).set_default_size("640K"); // software list SOFTWARE_LIST(config, "flop_list").set_original("pc1640_flop"); SOFTWARE_LIST(config, "hdd_list").set_original("pc1640_hdd"); }
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"); }
INT frontend_exit() { rs232(CMD_EXIT, info); return SUCCESS; }
INT begin_of_run(INT run_number, char *error) { /* put here clear scalers etc. */ rs232(CMD_READ, info, strin, 256, 100); return SUCCESS; }
GFXDECODE_END void osborne1_state::osborne1(machine_config &config) { Z80(config, m_maincpu, MAIN_CLOCK/4); m_maincpu->set_addrmap(AS_PROGRAM, &osborne1_state::osborne1_mem); m_maincpu->set_addrmap(AS_OPCODES, &osborne1_state::osborne1_op); m_maincpu->set_addrmap(AS_IO, &osborne1_state::osborne1_io); m_maincpu->irqack_cb().set(FUNC(osborne1_state::irqack_w)); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_color(rgb_t::green()); m_screen->set_screen_update(FUNC(osborne1_state::screen_update)); m_screen->set_raw(MAIN_CLOCK, 1024, 0, 104*8, 260, 0, 24*10); m_screen->set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_osborne1); PALETTE(config, "palette", palette_device::MONOCHROME_HIGHLIGHT); SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker); m_speaker->add_route(ALL_OUTPUTS, "mono", 1.00); PIA6821(config, m_pia0); m_pia0->readpa_handler().set(m_ieee, FUNC(ieee488_device::dio_r)); m_pia0->readpb_handler().set(FUNC(osborne1_state::ieee_pia_pb_r)); m_pia0->writepa_handler().set(m_ieee, FUNC(ieee488_device::host_dio_w)); m_pia0->writepb_handler().set(FUNC(osborne1_state::ieee_pia_pb_w)); m_pia0->ca2_handler().set(m_ieee, FUNC(ieee488_device::host_ifc_w)); m_pia0->cb2_handler().set(m_ieee, FUNC(ieee488_device::host_ren_w)); m_pia0->irqa_handler().set(FUNC(osborne1_state::ieee_pia_irq_a_func)); IEEE488(config, m_ieee, 0); m_ieee->srq_callback().set(m_pia0, FUNC(pia6821_device::ca2_w)); PIA6821(config, m_pia1); m_pia1->writepa_handler().set(FUNC(osborne1_state::video_pia_port_a_w)); m_pia1->writepb_handler().set(FUNC(osborne1_state::video_pia_port_b_w)); m_pia1->cb2_handler().set(FUNC(osborne1_state::video_pia_out_cb2_dummy)); m_pia1->irqa_handler().set(FUNC(osborne1_state::video_pia_irq_a_func)); ACIA6850(config, m_acia); m_acia->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); m_acia->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); m_acia->irq_handler().set(FUNC(osborne1_state::serial_acia_irq_func)); rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr)); rs232.rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd)); rs232.dcd_handler().set(m_acia, FUNC(acia6850_device::write_dcd)); rs232.cts_handler().set(m_acia, FUNC(acia6850_device::write_cts)); rs232.ri_handler().set(m_pia1, FUNC(pia6821_device::ca2_w)); MB8877(config, m_fdc, MAIN_CLOCK/16); m_fdc->set_force_ready(true); FLOPPY_CONNECTOR(config, m_floppy0, osborne1_floppies, "525ssdd", floppy_image_device::default_floppy_formats); FLOPPY_CONNECTOR(config, m_floppy1, osborne1_floppies, "525ssdd", floppy_image_device::default_floppy_formats); // internal ram RAM(config, RAM_TAG).set_default_size("68K"); // 64kB main RAM and 4kbit video attribute RAM SOFTWARE_LIST(config, "flop_list").set_original("osborne1"); }
// Main loop // the AVR enters this function at boot time int main (void) { int effect_index = 0; int tempval; // This function initiates IO ports, timers, interrupts and // serial communications ioinit(); usart_init(); debug_init(); util_init(); // This variable specifies which layer is currently being drawn by the // cube interrupt routine. We assign a value to it to make sure it's not >7. current_layer = 7; // This variable specifies the starting mode, this can be changed by pushing the // mode button or by typing in commands in the prompt. current_mode = MODE_RANDOM; //Binary mode binary_mode = 0; // Reads a value from AD converter and uses it to seed the pseudo random number generator, // Not perfect since AD converter returns a value from 0 to 1023 but good enough. tempval = ADC_Read(7); srand(tempval); // Enable interrupts // This starts the routine that draws the cube content sei(); // Main loop, does awesome shit forever! while (1) { if(current_mode == MODE_RANDOM) { effect_index = rand() % EFFECTS_TOTAL; launch_effect(effect_index); } else if(current_mode == MODE_SEQUENTIAL) { effect_index++; effect_index %= EFFECTS_TOTAL; launch_effect(effect_index); } else if(current_mode == MODE_SELF_TEST) { override_delay(0); SelfTest(); } else if(current_mode == MODE_MUSIC_RANDOM) { } else if(current_mode == MODE_MUSIC_SEQUENTIAL) { } else if(current_mode == MODE_BINARY) { rs232(); } else { current_mode = MODE_RANDOM; } } }