Ejemplo n.º 1
0
Archivo: saturn.cpp Proyecto: Fulg/mame
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));
}
Ejemplo n.º 2
0
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
}
Ejemplo n.º 3
0
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;
}