MACHINE_START_MEMBER(sat_console_state, saturn) { system_time systime; machine().base_datetime(systime); machine().device<scsp_device>("scsp")->set_ram_base(m_sound_ram); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x02400000, 0x027fffff, read32_delegate(FUNC(sat_console_state::saturn_null_ram_r),this), write32_delegate(FUNC(sat_console_state::saturn_null_ram_w),this)); m_slave->space(AS_PROGRAM).install_readwrite_handler(0x02400000, 0x027fffff, read32_delegate(FUNC(sat_console_state::saturn_null_ram_r),this), write32_delegate(FUNC(sat_console_state::saturn_null_ram_w),this)); m_maincpu->space(AS_PROGRAM).nop_readwrite(0x04000000, 0x047fffff); m_slave->space(AS_PROGRAM).nop_readwrite(0x04000000, 0x047fffff); m_nvram->set_base(m_backupram.get(), 0x8000); m_smpc_nv->set_base(&m_smpc.SMEM, 4); if (m_exp) { switch (m_exp->get_cart_type()) { case 0x21: // Battery RAM cart case 0x22: case 0x23: case 0x24: m_maincpu->space(AS_PROGRAM).install_read_handler(0x04000000, 0x047fffff, read32_delegate(FUNC(sat_cart_slot_device::read_ext_bram), (sat_cart_slot_device*)m_exp)); m_maincpu->space(AS_PROGRAM).install_write_handler(0x04000000, 0x047fffff, write32_delegate(FUNC(sat_cart_slot_device::write_ext_bram), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_read_handler(0x04000000, 0x047fffff, read32_delegate(FUNC(sat_cart_slot_device::read_ext_bram), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_write_handler(0x04000000, 0x047fffff, write32_delegate(FUNC(sat_cart_slot_device::write_ext_bram), (sat_cart_slot_device*)m_exp)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x24000000, 0x247fffff, read32_delegate(FUNC(sat_cart_slot_device::read_ext_bram), (sat_cart_slot_device*)m_exp)); m_maincpu->space(AS_PROGRAM).install_write_handler(0x24000000, 0x247fffff, write32_delegate(FUNC(sat_cart_slot_device::write_ext_bram), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_read_handler(0x24000000, 0x247fffff, read32_delegate(FUNC(sat_cart_slot_device::read_ext_bram), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_write_handler(0x24000000, 0x247fffff, write32_delegate(FUNC(sat_cart_slot_device::write_ext_bram), (sat_cart_slot_device*)m_exp)); break; case 0x5a: // Data RAM cart case 0x5c: m_maincpu->space(AS_PROGRAM).install_read_handler(0x02400000, 0x025fffff, read32_delegate(FUNC(sat_cart_slot_device::read_ext_dram0), (sat_cart_slot_device*)m_exp)); m_maincpu->space(AS_PROGRAM).install_write_handler(0x02400000, 0x025fffff, write32_delegate(FUNC(sat_cart_slot_device::write_ext_dram0), (sat_cart_slot_device*)m_exp)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x02600000, 0x027fffff, read32_delegate(FUNC(sat_cart_slot_device::read_ext_dram1), (sat_cart_slot_device*)m_exp)); m_maincpu->space(AS_PROGRAM).install_write_handler(0x02600000, 0x027fffff, write32_delegate(FUNC(sat_cart_slot_device::write_ext_dram1), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_read_handler(0x02400000, 0x025fffff, read32_delegate(FUNC(sat_cart_slot_device::read_ext_dram0), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_write_handler(0x02400000, 0x025fffff, write32_delegate(FUNC(sat_cart_slot_device::write_ext_dram0), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_read_handler(0x02600000, 0x027fffff, read32_delegate(FUNC(sat_cart_slot_device::read_ext_dram1), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_write_handler(0x02600000, 0x027fffff, write32_delegate(FUNC(sat_cart_slot_device::write_ext_dram1), (sat_cart_slot_device*)m_exp)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x22400000, 0x225fffff, read32_delegate(FUNC(sat_cart_slot_device::read_ext_dram0), (sat_cart_slot_device*)m_exp)); m_maincpu->space(AS_PROGRAM).install_write_handler(0x22400000, 0x225fffff, write32_delegate(FUNC(sat_cart_slot_device::write_ext_dram0), (sat_cart_slot_device*)m_exp)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x22600000, 0x227fffff, read32_delegate(FUNC(sat_cart_slot_device::read_ext_dram1), (sat_cart_slot_device*)m_exp)); m_maincpu->space(AS_PROGRAM).install_write_handler(0x22600000, 0x227fffff, write32_delegate(FUNC(sat_cart_slot_device::write_ext_dram1), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_read_handler(0x22400000, 0x225fffff, read32_delegate(FUNC(sat_cart_slot_device::read_ext_dram0), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_write_handler(0x22400000, 0x225fffff, write32_delegate(FUNC(sat_cart_slot_device::write_ext_dram0), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_read_handler(0x22600000, 0x227fffff, read32_delegate(FUNC(sat_cart_slot_device::read_ext_dram1), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_write_handler(0x22600000, 0x227fffff, write32_delegate(FUNC(sat_cart_slot_device::write_ext_dram1), (sat_cart_slot_device*)m_exp)); break; case 0xff: // ROM cart + mirror m_maincpu->space(AS_PROGRAM).install_read_handler(0x02000000, 0x023fffff, read32_delegate(FUNC(sat_cart_slot_device::read_rom), (sat_cart_slot_device*)m_exp)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x22000000, 0x223fffff, read32_delegate(FUNC(sat_cart_slot_device::read_rom), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_read_handler(0x02000000, 0x023fffff, read32_delegate(FUNC(sat_cart_slot_device::read_rom), (sat_cart_slot_device*)m_exp)); m_slave->space(AS_PROGRAM).install_read_handler(0x22000000, 0x223fffff, read32_delegate(FUNC(sat_cart_slot_device::read_rom), (sat_cart_slot_device*)m_exp)); break; } } // save states save_pointer(NAME(m_scu_regs.get()), 0x100/4); save_pointer(NAME(m_scsp_regs.get()), 0x1000/2); save_item(NAME(m_NMI_reset)); save_item(NAME(m_en_68k)); save_item(NAME(m_smpc.IOSEL1)); save_item(NAME(m_smpc.IOSEL2)); save_item(NAME(m_smpc.EXLE1)); save_item(NAME(m_smpc.EXLE2)); save_item(NAME(m_smpc.PDR1)); save_item(NAME(m_smpc.PDR2)); // save_item(NAME(m_port_sel)); // save_item(NAME(mux_data)); save_item(NAME(m_scsp_last_line)); save_item(NAME(m_smpc.intback_stage)); save_item(NAME(m_smpc.pmode)); save_item(NAME(m_smpc.SR)); save_item(NAME(m_smpc.SMEM)); machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(sat_console_state::stvcd_exit), this)); m_smpc.rtc_data[0] = DectoBCD(systime.local_time.year /100); m_smpc.rtc_data[1] = DectoBCD(systime.local_time.year %100); m_smpc.rtc_data[2] = (systime.local_time.weekday << 4) | (systime.local_time.month+1); m_smpc.rtc_data[3] = DectoBCD(systime.local_time.mday); m_smpc.rtc_data[4] = DectoBCD(systime.local_time.hour); m_smpc.rtc_data[5] = DectoBCD(systime.local_time.minute); m_smpc.rtc_data[6] = DectoBCD(systime.local_time.second); m_stv_rtc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sat_console_state::stv_rtc_increment),this)); m_audiocpu->set_reset_callback(write_line_delegate(FUNC(sat_console_state::m68k_reset_callback),this)); }
void CommunicationCoupling::processCmd4PcClarity( quint8 hID, quint32 hAI, quint32 hPFC,quint32 hVal ) { #if 1 //0x01是读取产品ID,因此不需要匹配ID; if(hPFC != PFCC_READ_PRODUCT_ID && hID != ID) return; QString strDisp(""); //命令处理; switch( hPFC ) { //以下需要回复数据; case PFCC_READ_PRODUCT_ID: { strDisp = QString("read ID"); sendCmdClarity(0,PFCC_READ_PRODUCT_ID,ID); } break; case PFCC_READ_LICENSE_H: { quint64 license = DataBase::getInstance()->queryData("license").toULong(); license/=1000000; license = DectoBCD(license,6); sendCmdClarity(0,PFCC_READ_LICENSE_H,license); } break; case PFCC_READ_LICENSE_L: { quint64 license = DataBase::getInstance()->queryData("license").toULong(); license%=1000000; license = DectoBCD(license,6); sendCmdClarity(0,PFCC_READ_LICENSE_L,license); } break; case PFCC_READ_PUMPSTATUS: { strDisp = QString("read pump stat"); quint32 val = m_pMachine->pcGetMachineStat(); sendCmdClarity(0,PFCC_READ_PUMPSTATUS,val); } break; case PFCC_READ_PUMPFIX: { strDisp = QString("read pump fix"); } break; case PFCC_READ_PUMPTIME: { strDisp = QString("read pump time"); } break; //以下需要回复ACK或者NACK case PFCC_SET_FLOW: { strDisp = QString("set flow"); double flow = hVal/1000.0; m_pMachine->updateFlow(flow, MachineStat::PC_MODE); sendClarityACK(); } break; case PFCC_SET_FLOWPERCENT: { strDisp = QString("set flow percent"); double percent = hVal/10.0; m_pMachine->updateFlowPercent(percent); } break; case PFCC_SYNCTIME: { strDisp = QString("time sync;"); } break; case PFCC_MAX_PRESS: { strDisp = QString("max press;"); QString data = QString::number((double)hVal/100.0); DataBase::getInstance()->updateDate("maxpress", data); sendClarityACK(); } break; case PFCC_MIN_PRESS: { strDisp = QString("min press;"); QString data = QString::number((double)hVal/100.0); DataBase::getInstance()->updateDate("minpress", data); sendClarityACK(); } break; case PFCC_PUMPSTART: { strDisp = QString("pump start;"); m_pMachine->setMachineStat(MachineStat::PCCTRL); sendClarityACK(); } break; case PFCC_PUMPSTOP: { m_pMachine->setMachineStat(MachineStat::STOP); sendClarityACK(); } break; case PFCC_PRESSCLEAR: { strDisp = QString("press clear;"); } break; case PFCC_READ_PRESS: { strDisp = QString("read press;"); } break; case PFCC_SET_MODE: { strDisp = QString("set mode;"); } break; case PFCC_SET_FLOWFIX: { strDisp = QString("set flow fix;"); } break; //主动发送; case PFCC_SEND_PRESS: { strDisp = QString("send press;"); } break; case PFCC_INPUT_EVENT: { strDisp = QString("input event;"); } break; case PFCC_SYS_ERR: { strDisp = QString("sys error;"); } break; default: strDisp = QString("命令无法识别...;"); //SendNAK(); break; } qDebug()<<strDisp; #endif }
void CommunicationCoupling::processCmd4PcClarity(quint8 hID, quint32 hAI, quint32 hPFC,quint32 hVal) { QString strDisp(""); //命令处理; switch( hPFC ) { //以下需要回复数据; case PFCC_READ_PRODUCT_ID: { strDisp = QString("read ID"); sendCmdClarity(0,PFCC_READ_PRODUCT_ID,ID); } break; case PFCC_READ_LICENSE_H: { //strDisp = QString("read licnese h"); quint64 license = DataBase::getInstance()->queryData("license").toULong(); license/=1000000; license = DectoBCD(license,6); sendCmdClarity(0,PFCC_READ_LICENSE_H,license); } break; case PFCC_READ_LICENSE_L: { quint64 license = DataBase::getInstance()->queryData("license").toULong(); license%=1000000; license = DectoBCD(license,6); sendCmdClarity(0,PFCC_READ_LICENSE_L,license); } break; case PFCC_READ_STATUS1: { /*00XXXX:氘灯关状态 01XXXX:氘灯开状态 10XXXX:乌灯关状态 11XXXX:乌灯开状态 XXXX为当前检测器波长,190~700nm */ quint32 val = m_pMachine->getMachineStat1(); sendCmdClarity(0,PFCC_READ_STATUS1,val); } break; case PFCC_READ_STATUS2: { quint32 val = m_pMachine->getMachineStat2(); sendCmdClarity(0,PFCC_READ_STATUS2,val); } break; case PFCC_READ_SFVERSION: { strDisp = QString("read software version"); sendCmdClarity(0,PFCC_READ_SFVERSION,1); } break; case PFCC_READ_REF: { //strDisp = QString("read ref"); quint32 sampleVal =m_pMachine->getSamleVal(); sampleVal = 74746; sendCmdClarity(0,PFCC_READ_REF,sampleVal); } break; case PFCC_READ_SIG: { uint32 refVal =m_pMachine->getRefVal(); sendCmdClarity(0,PFCC_READ_SIG,refVal); } break; //以下需要回复ACK或者NACK case PFCC_SET_WAVE: { m_pMachine->changeWaveLength(QString::number(hVal, 16).toDouble(), MachineStat::EWLEN1); sendClarityACK(); } break; case PFCC_SET_TIMECST: { QStringList list; list<<"1"<<"2"<<"5"<<"10"<<"20"<<"50"; QString data = QString::number(hVal,16); int index = list.indexOf(data); if(index != -1) DataBase::getInstance()->updateDate("timeconst", QString::number(index)); sendClarityACK(); } break; case PFCC_SET_OUTPUTRNG: { int index = QString::number(hVal,16).toInt(); DataBase::getInstance()->updateDate("range", QString::number(index)); sendClarityACK(); } break; case PFCC_SET_SYNCTIME: { strDisp = QString("max press;"); sendClarityACK(); } break; case PFCC_SET_LIGHTON: { m_pMachine->setLampStat(MachineStat::ON); sendClarityACK(); } break; case PFCC_SET_LIGHTOFF: { m_pMachine->setLampStat(MachineStat::OFF); sendClarityACK(); } break; case PFCC_WAVE_INI: { m_pMachine->resetWaveAndAngle(); m_pMachine->setWaveCtrlWordAndHome(); sendClarityACK(); } break; case PFCC_AUTO_CLEAR: { m_pMachine->setPercentOfRandS(); sendClarityACK(); } break; case PFCC_SET_AUFREQ: { //设置上传频率; m_pMachine->setUploadAuFreq(hVal); sendClarityACK(); } break; case PFCC_SET_OUTPUTEV: { strDisp = QString("set mode;"); sendClarityACK(); } break; case PFCC_SET_LIGHT: { m_pMachine->changeLampSrc(hVal); sendClarityACK(); } break; default: strDisp = QString("命令无法识别...;"); break; } qDebug()<<strDisp; }