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 vdm7932x_state::vdm7932x(machine_config &config) // all clocks unverified { Z80(config, m_maincpu, 24.0734_MHz_XTAL / 8); // UA880D m_maincpu->set_addrmap(AS_PROGRAM, &vdm7932x_state::mem_map); m_maincpu->set_addrmap(AS_IO, &vdm7932x_state::io_map); m_maincpu->set_daisy_config(daisy_chain); I8031(config, m_subcpu, 24.0734_MHz_XTAL / 4); // Intel P8031AH (for keyboard?) m_subcpu->port_in_cb<3>().set(FUNC(vdm7932x_state::i8031_p3_r)); m_subcpu->set_addrmap(AS_PROGRAM, &vdm7932x_state::sub_map); m_subcpu->set_addrmap(AS_IO, &vdm7932x_state::subx_map); PIT8253(config, "pit", 0); // UM8253-5 z80ctc_device &ctc(Z80CTC(config, "ctc", 24.0734_MHz_XTAL / 8)); // UA857D ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); z80sio_device &sio(Z80SIO(config, "sio", 24.0734_MHz_XTAL / 8)); // UA8560D sio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); i8255_device &ppi1(I8255A(config, "ppi1")); // КР580ВВ55А (on separate card) ppi1.out_pc_callback().set(FUNC(vdm7932x_state::ppi1_pc_w)); I8255A(config, "ppi2"); // КР580ВВ55А (on separate card) }
void execute() { switch ( ir.op) { //lit case 1: lit(ir.m); break; // opr will require another sub-function to decide // which operation to run case 2: opr(); break; //lod case 3: lod(ir.l, ir.m); break; //sto case 4: sto(ir.l, ir.m); break; //cal case 5: cal(ir.l, ir.m); break; //inc case 6: inc(ir.m); break; //jmp case 7: jmp(ir.m); break; //jpc case 8: jpc(ir.m); break; //sio //this will require another sub function to decide //which i/o to run case 9: sio(); break; default: fprintf(output, "OP code input was invalid. "); sio3(); } //print pc, bp, sp //use loop to print stack fprintf(output, "\t%d\t\t%d\t%d\t", pc, bp, sp); stackPrint(); }
void scannerThreadFunc() { std::cout << "[scanner] Connecting..." << std::endl; serial::SerialConnection sio( "/dev/tty.usbmodem1421", 9600, "/Users/Deco/workspace/sep/thermalprototype/test.log" ); std::cout << "[scanner] Connected!" << std::endl; byte delay = 0; int pixelI = 0; unsigned char newSensorData[8]; while(true) { if(1) { sf::Lock isRunningMutexLock(isRunningMutex); if(!isRunning) { break; } } if(1) { sf::Lock sensorControlMutexLock(sensorControlMutex); if(delay != sensorUpdateDelay) { delay = sensorUpdateDelay; serial::ByteArray requestData; requestData.push_back(255); requestData.push_back(delay); sio.SendData(requestData); } } serial::ByteArray res = sio.ReceiveData(1); if(res[0] == 255) { pixelI = 0; } else { newSensorData[pixelI] = res[0]; pixelI++; if(pixelI > 7) { pixelI = 7; if(1) { sf::Lock sensorDataMutexLock(sensorDataMutex); //std::cout << "mmmm " << (int)newSensorData[3] << std::endl; memcpy(sensorData, newSensorData, 8); } sf::sleep(sf::milliseconds(1)); } } } }
void HttpServer::_onClientReadyRead() { auto socket = qobject_cast<QTcpSocket *>(this->sender()); qtael::Async * task = new qtael::Async([=](const qtael::Await & await)->void { // NOTE you can pass `yield` to any function auto data = get(await, "https://www.google.com/"); QTextStream sio(socket); sio.setCodec(QTextCodec::codecForName("UTF-8")); sendResponse(sio, data); socket->close(); }); task->connect(task, SIGNAL(finished()), SLOT(deleteLater())); task->start(); }
void TPIO::commitTxPages(TPIOTxSession* tx, ver_t verW, bool isRebase) { // sort modified pages ary Vpage_id_t& pagesModified = tx->m_pagesModified; std::sort(pagesModified.begin(), pagesModified.end()); // write streaks { StreakIO<Vpage_id_t::const_iterator> sio(pagesModified.begin(), pagesModified.end(), backend()); sio.write(BufferCRef(&m_stat.nUniquePages, sizeof(uint64_t))); tx->oldlink()->dump(sio); } // fill tpio header // NOTE: this assumes mmap-ed pageio impl { for(page_id_t pgid: pagesModified) { Page pgLast(m_backend->readPage(pgid)); pgLast.hdr()->txid = verW; pgLast.hdr()->flags = page_hdr_t::PF_VALID; } // last page of tx w/ special flag { page_id_t pgidLast = pagesModified.back(); Page pgLast(m_backend->readPage(pgidLast)); page_hdr_t::flags_t flags = page_hdr_t::PF_VALID | page_hdr_t::PF_END_TX; if(isRebase) flags |= page_hdr_t::PF_TX_REBASE; pgLast.hdr()->flags = flags; } } // write pages to disk syncDelayed(pagesModified); }
inline children launch_pipeline(const Entries &entries) { BOOST_ASSERT(entries.size() >= 2); children cs; detail::file_handle fhinvalid; boost::scoped_array<detail::pipe> pipes(new detail::pipe[entries.size() - 1]); #if defined(BOOST_POSIX_API) { typename Entries::size_type i = 0; const typename Entries::value_type::context_type &ctx = entries[i].context; detail::info_map infoin, infoout; if (ctx.stdin_behavior.get_type() != stream_behavior::close) { detail::stream_info si = detail::stream_info(ctx.stdin_behavior, false); infoin.insert(detail::info_map::value_type(STDIN_FILENO, si)); } BOOST_ASSERT(ctx.stdout_behavior.get_type() == stream_behavior::close); detail::stream_info si2(close_stream(), true); si2.type_ = detail::stream_info::use_handle; si2.handle_ = pipes[i].wend().release(); infoout.insert(detail::info_map::value_type(STDOUT_FILENO, si2)); if (ctx.stderr_behavior.get_type() != stream_behavior::close) { detail::stream_info si = detail::stream_info(ctx.stderr_behavior, true); infoout.insert(detail::info_map::value_type(STDERR_FILENO, si)); } detail::posix_setup s; s.work_directory = ctx.work_directory; pid_t pid = detail::posix_start(entries[i].executable, entries[i].arguments, ctx.environment, infoin, infoout, s); detail::file_handle fhstdin; if (ctx.stdin_behavior.get_type() == stream_behavior::capture) { fhstdin = detail::posix_info_locate_pipe(infoin, STDIN_FILENO, false); BOOST_ASSERT(fhstdin.valid()); } cs.push_back(child(pid, fhstdin, fhinvalid, fhinvalid)); } for (typename Entries::size_type i = 1; i < entries.size() - 1; ++i) { const typename Entries::value_type::context_type &ctx = entries[i].context; detail::info_map infoin, infoout; BOOST_ASSERT(ctx.stdin_behavior.get_type() == stream_behavior::close); detail::stream_info si1(close_stream(), false); si1.type_ = detail::stream_info::use_handle; si1.handle_ = pipes[i - 1].rend().release(); infoin.insert(detail::info_map::value_type(STDIN_FILENO, si1)); BOOST_ASSERT(ctx.stdout_behavior.get_type() == stream_behavior::close); detail::stream_info si2(close_stream(), true); si2.type_ = detail::stream_info::use_handle; si2.handle_ = pipes[i].wend().release(); infoout.insert(detail::info_map::value_type(STDOUT_FILENO, si2)); if (ctx.stderr_behavior.get_type() != stream_behavior::close) { detail::stream_info si = detail::stream_info(ctx.stderr_behavior, true); infoout.insert(detail::info_map::value_type(STDERR_FILENO, si)); } detail::posix_setup s; s.work_directory = ctx.work_directory; pid_t pid = detail::posix_start(entries[i].executable, entries[i].arguments, ctx.environment, infoin, infoout, s); cs.push_back(child(pid, fhinvalid, fhinvalid, fhinvalid)); } { typename Entries::size_type i = entries.size() - 1; const typename Entries::value_type::context_type &ctx = entries[i].context; detail::info_map infoin, infoout; BOOST_ASSERT(ctx.stdin_behavior.get_type() == stream_behavior::close); detail::stream_info si1(close_stream(), false); si1.type_ = detail::stream_info::use_handle; si1.handle_ = pipes[i - 1].rend().release(); infoin.insert(detail::info_map::value_type(STDIN_FILENO, si1)); if (ctx.stdout_behavior.get_type() != stream_behavior::close) { detail::stream_info si = detail::stream_info(ctx.stdout_behavior, true); infoout.insert(detail::info_map::value_type(STDOUT_FILENO, si)); } if (ctx.stderr_behavior.get_type() != stream_behavior::close) { detail::stream_info si = detail::stream_info(ctx.stderr_behavior, true); infoout.insert(detail::info_map::value_type(STDERR_FILENO, si)); } detail::posix_setup s; s.work_directory = ctx.work_directory; pid_t pid = detail::posix_start(entries[i].executable, entries[i].arguments, ctx.environment, infoin, infoout, s); detail::file_handle fhstdout, fhstderr; if (ctx.stdout_behavior.get_type() == stream_behavior::capture) { fhstdout = detail::posix_info_locate_pipe(infoout, STDOUT_FILENO, true); BOOST_ASSERT(fhstdout.valid()); } if (ctx.stderr_behavior.get_type() == stream_behavior::capture) { fhstderr = detail::posix_info_locate_pipe(infoout, STDERR_FILENO, true); BOOST_ASSERT(fhstderr.valid()); } cs.push_back(child(pid, fhinvalid, fhstdout, fhstderr)); } #elif defined(BOOST_WINDOWS_API) STARTUPINFOA si; detail::win32_setup s; s.startupinfo = &si; { typename Entries::size_type i = 0; const typename Entries::value_type::context_type &ctx = entries[i].context; detail::stream_info sii = detail::stream_info(ctx.stdin_behavior, false); detail::file_handle fhstdin; if (sii.type_ == detail::stream_info::use_pipe) fhstdin = sii.pipe_->wend(); BOOST_ASSERT(ctx.stdout_behavior.get_type() == stream_behavior::close); detail::stream_info sio(close_stream(), true); sio.type_ = detail::stream_info::use_handle; sio.handle_ = pipes[i].wend().release(); detail::stream_info sie(ctx.stderr_behavior, true); s.work_directory = ctx.work_directory; ::ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); PROCESS_INFORMATION pi = detail::win32_start(entries[i].executable, entries[i].arguments, ctx.environment, sii, sio, sie, s); if (!::CloseHandle(pi.hThread)) boost::throw_exception(boost::system::system_error(boost::system::error_code(::GetLastError(), boost::system::get_system_category()), "boost::process::launch_pipeline: CloseHandle failed")); cs.push_back(child(pi.dwProcessId, fhstdin, fhinvalid, fhinvalid, detail::file_handle(pi.hProcess))); } for (typename Entries::size_type i = 1; i < entries.size() - 1; ++i) { const typename Entries::value_type::context_type &ctx = entries[i].context; BOOST_ASSERT(ctx.stdin_behavior.get_type() == stream_behavior::close); detail::stream_info sii(close_stream(), false); sii.type_ = detail::stream_info::use_handle; sii.handle_ = pipes[i - 1].rend().release(); detail::stream_info sio(close_stream(), true); sio.type_ = detail::stream_info::use_handle; sio.handle_ = pipes[i].wend().release(); detail::stream_info sie(ctx.stderr_behavior, true); s.work_directory = ctx.work_directory; ::ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); PROCESS_INFORMATION pi = detail::win32_start(entries[i].executable, entries[i].arguments, ctx.environment, sii, sio, sie, s); if (!::CloseHandle(pi.hThread)) boost::throw_exception(boost::system::system_error(boost::system::error_code(::GetLastError(), boost::system::get_system_category()), "boost::process::launch_pipeline: CloseHandle failed")); cs.push_back(child(pi.dwProcessId, fhinvalid, fhinvalid, fhinvalid, detail::file_handle(pi.hProcess))); } { typename Entries::size_type i = entries.size() - 1; const typename Entries::value_type::context_type &ctx = entries[i].context; BOOST_ASSERT(ctx.stdin_behavior.get_type() == stream_behavior::close); detail::stream_info sii(close_stream(), false); sii.type_ = detail::stream_info::use_handle; sii.handle_ = pipes[i - 1].rend().release(); detail::file_handle fhstdout, fhstderr; detail::stream_info sio(ctx.stdout_behavior, true); if (sio.type_ == detail::stream_info::use_pipe) fhstdout = sio.pipe_->rend(); detail::stream_info sie(ctx.stderr_behavior, true); if (sie.type_ == detail::stream_info::use_pipe) fhstderr = sie.pipe_->rend(); s.work_directory = ctx.work_directory; ::ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); PROCESS_INFORMATION pi = detail::win32_start(entries[i].executable, entries[i].arguments, ctx.environment, sii, sio, sie, s); if (!::CloseHandle(pi.hThread)) boost::throw_exception(boost::system::system_error(boost::system::error_code(::GetLastError(), boost::system::get_system_category()), "boost::process::launch_pipeline: CloseHandle failed")); cs.push_back(child(pi.dwProcessId, fhinvalid, fhstdout, fhstderr, detail::file_handle(pi.hProcess))); } #endif return cs; }
int main() { CApp::get(); Media sio("res/SIO.wav"); int pos_x[5] = { -200, -100, 0, 100, 200 }; bool is_hit[BULLET_MAX]; for (int i = 0; i < BULLET_MAX; ++i) { is_hit[i] = true; } float icon_x[] = { -200,200,-100,100,-200, -100, 100,200,100,-100, 100,200,-100,-200,200, 200,100,-100,-200,-200, -200,-100,100,200,200, 200,100,-100,-200 }; float icon_y[] = { 950/4, 2200/4, 2400/4, 2600/4, 3500/4, 4400/4, 4600/4, 4800/4, 5000/4, 5200/4, 5400/4, 5600/4, 5800/4, 6050/4, 7000/4, 7100/4, 7300/4, 7450/4, 7600/4, 8700/4, 8800/4, 9000/4, 9150/4, 9300/4, 10400/4, 10500/4, 10700/4, 10850/4, 11000/4, }; Vec2f icon_size = Vec2f(15.5f,6.25f); Cnode Note[BULLET_MAX]; // ノートを29個分生成 Cjudge judge = Cjudge(); float geter_icon_pos_y[BULLET_MAX]; for (int i = 0; i < BULLET_MAX; ++i) { geter_icon_pos_y[i] = 0; } sio.play(); bool temp_flag[BULLET_MAX]; for (int i = 0; i < BULLET_MAX; ++i) { temp_flag[i] = false; } while (CApp::get().isOpen()) { CApp::get().begin(); deltaTime = clock() - lastFrameTime; // 移動用デルタタイム lastFrameTime = clock(); for (int i = 0; i < 5; ++i) { drawFillCircle(pos_x[i], -200, 30, 7.5, 30, Color::red); } for (int i = 0; i < BULLET_MAX; ++i) { Note[i].Init(icon_x[i], icon_y[i], icon_size); // 一回のみ初期化 Note[i].Draw(); // 描画処理 Note[i].Move(deltaTime * 0.15f); // 移動処理 } for (int i = 0; i < BULLET_MAX; ++i) { geter_icon_pos_y[i] = Note[i].Get_icon_pos_y(); } if (CApp::get().isPushKey('A')) { for (int i = 0; i < BULLET_MAX; ++i) { if (!temp_flag[i] && Inside(geter_icon_pos_y[i], -150, -250)) { temp_flag[i] = true; break; } } } for (int i = 0; i < BULLET_MAX; ++i) { //if (!Note[i].Is_active()) continue; if (temp_flag[i] == true) { Note[i].Is_dead(); judge.Is_draw_active(geter_icon_pos_y[i]); judge.draw(); } } CApp::get().end(); } }
void executeInstruction() { switch(ir.op) { case 1: lit(); break; case 2: opr(); break; case 3: lod(); break; case 4: sto(); break; case 5: cal(); break; case 6: inc(); break; case 7: jmp(); break; case 8: jpc(); break; case 9: sio(); default: break; } void opr() { switch ( ir.m) { //rtn case 0: ret(); break; //neg case 1: neg(); break; //add case 2: add(); break; //sub case 3: sub(); break; //mul case 4: mul(); break; //div case 5: divid(); break; //odd case 6: odd(); break; //mod case 7: mod(); break; //eql case 8: eql(); break; //neq case 9: neq(); break; //lss case 10: lss(); break; //leq case 11: leq(); break; //gtr case 12: gtr(); break; //geq case 13: geq(); break; default: fprintf(output, "OP code input was invalid. "); halt = 1; break; } } }
void pve500_state::pve500(machine_config &config) { /* Main CPU */ TMPZ84C015(config, m_maincpu, 12_MHz_XTAL / 2); // TMPZ84C015BF-6 m_maincpu->set_addrmap(AS_PROGRAM, &pve500_state::maincpu_prg); m_maincpu->set_addrmap(AS_IO, &pve500_state::maincpu_io); m_maincpu->set_daisy_config(maincpu_daisy_chain); m_maincpu->out_dtra_callback().set(FUNC(pve500_state::GPI_w)); m_maincpu->out_dtrb_callback().set(m_buzzer, FUNC(beep_device::set_state)).invert(); m_maincpu->out_txda_callback().set("recorder", FUNC(rs232_port_device::write_txd)); m_maincpu->out_txdb_callback().set("player1", FUNC(rs232_port_device::write_txd)); z80ctc_device& ctc(Z80CTC(config, "external_ctc", 12_MHz_XTAL / 2)); ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); z80sio0_device& sio(Z80SIO0(config, "external_sio", 12_MHz_XTAL / 2)); sio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); sio.out_txda_callback().set("player2", FUNC(rs232_port_device::write_txd)); sio.out_txdb_callback().set("edl_inout", FUNC(rs232_port_device::write_txd)); /* Secondary CPU */ TMPZ84C015(config, m_subcpu, 12_MHz_XTAL / 2); /* TMPZ84C015BF-6 */ m_subcpu->set_addrmap(AS_PROGRAM, &pve500_state::subcpu_prg); m_subcpu->set_addrmap(AS_IO, &pve500_state::subcpu_io); m_subcpu->out_dtra_callback().set(FUNC(pve500_state::cxdio_reset_w)); m_subcpu->out_dtrb_callback().set(FUNC(pve500_state::external_monitor_w)); m_subcpu->out_txda_callback().set("switcher", FUNC(rs232_port_device::write_txd)); m_subcpu->out_txdb_callback().set("serial_mixer", FUNC(rs232_port_device::write_txd)); // PIO callbacks m_subcpu->in_pa_callback().set(FUNC(pve500_state::eeprom_r)); m_subcpu->out_pa_callback().set(FUNC(pve500_state::eeprom_w)); // ICG3: I/O Expander CXD1095(config, m_cxdio, 0); m_cxdio->out_porta_cb().set(FUNC(pve500_state::io_sc_w)); m_cxdio->out_portb_cb().set(FUNC(pve500_state::io_le_w)); m_cxdio->in_portc_cb().set(FUNC(pve500_state::io_ky_r)); m_cxdio->out_portd_cb().set(FUNC(pve500_state::io_ld_w)); m_cxdio->out_porte_cb().set(FUNC(pve500_state::io_sel_w)); /* Search Dial MCUs */ MB88201(config, "dial_mcu_left", 4_MHz_XTAL).set_disable(); /* PLAYER DIAL MCU */ MB88201(config, "dial_mcu_right", 4_MHz_XTAL).set_disable(); /* RECORDER DIAL MCU */ /* Serial EEPROM (128 bytes, 8-bit data organization) */ /* The EEPROM stores the setup data */ EEPROM_MSM16911_8BIT(config, "eeprom"); /* FIX-ME: These are actually RS422 ports (except EDL IN/OUT which is indeed an RS232 port)*/ rs232_port_device &recorder(RS232_PORT(config, "recorder", default_rs232_devices, nullptr)); recorder.rxd_handler().set(m_maincpu, FUNC(tmpz84c015_device::rxa_w)); rs232_port_device &player1(RS232_PORT(config, "player1", default_rs232_devices, nullptr)); player1.rxd_handler().set(m_maincpu, FUNC(tmpz84c015_device::rxb_w)); rs232_port_device &player2(RS232_PORT(config, "player2", default_rs232_devices, nullptr)); player2.rxd_handler().set("external_sio", FUNC(z80dart_device::rxa_w)); rs232_port_device &edl_inout(RS232_PORT(config, "edl_inout", default_rs232_devices, nullptr)); edl_inout.rxd_handler().set("external_sio", FUNC(z80dart_device::rxb_w)); rs232_port_device &switcher(RS232_PORT(config, "switcher", default_rs232_devices, nullptr)); switcher.rxd_handler().set(m_subcpu, FUNC(tmpz84c015_device::rxa_w)); rs232_port_device &serial_mixer(RS232_PORT(config, "serial_mixer", default_rs232_devices, nullptr)); serial_mixer.rxd_handler().set(m_subcpu, FUNC(tmpz84c015_device::rxb_w)); clock_device &clk1(CLOCK(config, "clk1", 12_MHz_XTAL / 20)); clk1.signal_handler().set(m_maincpu, FUNC(tmpz84c015_device::rxca_w)); clk1.signal_handler().append(m_maincpu, FUNC(tmpz84c015_device::txca_w)); clk1.signal_handler().append(m_maincpu, FUNC(tmpz84c015_device::rxcb_w)); clk1.signal_handler().append(m_maincpu, FUNC(tmpz84c015_device::txcb_w)); clk1.signal_handler().append(m_subcpu, FUNC(tmpz84c015_device::rxca_w)); clk1.signal_handler().append(m_subcpu, FUNC(tmpz84c015_device::txca_w)); clk1.signal_handler().append(m_subcpu, FUNC(tmpz84c015_device::rxcb_w)); clk1.signal_handler().append(m_subcpu, FUNC(tmpz84c015_device::txcb_w)); /* ICF5: 2kbytes of RAM shared between the two CPUs (dual-port RAM)*/ mb8421_device &mb8421(MB8421(config, "mb8421")); mb8421.intl_callback().set(FUNC(pve500_state::mb8421_intl)); mb8421.intr_callback().set(FUNC(pve500_state::mb8421_intr)); /* video hardware */ config.set_default_layout(layout_pve500); /* audio hardware */ SPEAKER(config, "mono").front_center(); BEEP(config, "buzzer", 12_MHz_XTAL / 3200).add_route(ALL_OUTPUTS, "mono", 0.05); // 3.75 kHz CLK2 coming out of IC D4 (frequency divider circuitry) }