Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
92
Добавлен:
26.05.2014
Размер:
4.82 Кб
Скачать
//-----------------------------Version 0.42-----------------------------
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <process.h>
#include <share.h>
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <windows.h>


// тут слегка перепутаны названия DVG0 и DVG1,  но тк всё работает как  надо
// исправлять не охота

void	outp_emu ( unsigned AdrPorta, int ValuePorta );
int inp_emu(unsigned AdrPorta);
void derlay(int ){
	Yield();
	}

#undef inp(__portid)
#undef inportb(__portid)
#undef outp(__portid,__value)
#undef outportb(__portid,__value)

#define inp(port) (inp_emu(port))
#define inportb(port) (inp_emu(port))
#define outp(port, data) (outp_emu(port,data))
#define outportb(port, data) (outp_emu(port,data))
#define delay(x) (derlay(x))



struct zmURTK
{
unsigned char wstep[6];
unsigned char rstep[6];
unsigned char SNS0;
unsigned char SNS1;
unsigned char SNS2;
unsigned char DVG0;
unsigned char DVG1;

HWND SIMURTKDD_HWND;//FILE *DataURTKFile;
HWND SIMURTK_HWND; //FILE *DataUserFile;
int DataURTKTxt;
int DataUserTxt;
int GlobalUserData;
int GlobalURTKData;
int mode;
int WhatDVG;
int WhatSNS;
int BufData;


} eURTK={
0,0,0,0,0,0,
0,0,0,0,0,0,
0,
0,
0,
0,
0,//DVG1
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
};



int OpenURTKData(void){

  eURTK.SIMURTKDD_HWND=FindWindow("URTK_Datchik_Data_window",NULL);
  if(eURTK.SIMURTKDD_HWND!=NULL)eURTK.DataURTKTxt=1;else return 0;
  return 1;
}



int OpenUserData(void){//poisk okna Sim URTK
	eURTK.SIMURTK_HWND=FindWindow ("URTK_main_window",NULL);
	if((eURTK.SIMURTK_HWND == NULL)) { MessageBox(NULL,"Sim URTK not found!","Error",MB_OK); return 0;}
	eURTK.DataUserTxt=1;
	// SendMessage(eURTK.SIMURTK_HWND, 0x1300, 0, 1313);
	 return 1;
}

unsigned char GetURTKData(void)
{
// MSG msg;

if(eURTK.WhatSNS==1)
	{
	eURTK.WhatSNS=2;
	return (eURTK.SNS1);
	}
if(eURTK.WhatSNS==2)
	{
	eURTK.WhatSNS=0;
	return (eURTK.SNS2);
	}

if(eURTK.DataURTKTxt ==0){ if(!OpenURTKData()) return 0;}


char urtkdatabuf[9]="";
GetWindowText(eURTK.SIMURTKDD_HWND,urtkdatabuf,9);
sscanf(urtkdatabuf,"%x %x %x",&eURTK.SNS0,&eURTK.SNS1,&eURTK.SNS2);

eURTK.WhatSNS=1;

return (eURTK.SNS0);

}



void WriteUserData(void)
{

//if(((eURTK.WhatDVG==0) &&(eURTK.BufData==eURTK.DVG0)) ||((eURTK.WhatDVG==1)&&(eURTK.BufData==eURTK.DVG1))) return;//budem pisat tolko raznye dannye

if(eURTK.WhatDVG==0) {eURTK.DVG0=eURTK.BufData; return;}
if(eURTK.WhatDVG==1)  eURTK.DVG1=eURTK.BufData;

if(eURTK.DataUserTxt ==0){ if(!OpenUserData()) return;}//nashli li

SendMessage(eURTK.SIMURTK_HWND, 0x1300, eURTK.DVG1,eURTK.DVG0);

}







int inp_emu(unsigned eAdr)
{
unsigned char eData=0;
if(eAdr!=(0x378))return 0;
if(eURTK.rstep[2]) {eData=GetURTKData();eURTK.rstep[3]=1;}
//printf("inp=%d\n", eData);
return (eData);
}




void	outp_emu ( unsigned eAdr, int eData )
{
int RD,A0,WR,A1,B5;
//printf("outp_emu mode=%d\n",eURTK.mode);

if(eAdr==(0x378))
	{
	if((eURTK.rstep[1]==0)&&(eURTK.mode==(0x13))&&(eData==(0xFF))){eURTK.rstep[1]=1;return;}

	if(eURTK.wstep[1]==1){
		eURTK.BufData=eData;
		eURTK.wstep[2]=1;
		return;
		}	

	}
if(eAdr!=(0x37A))return;

RD=(eData&(0x1));
A0=(eData&(0x2))>>1;
WR=(eData&(0x4))>>2;
A1=(eData&(0x8))>>3;
B5=(eData&(0x20))>>5;

//printf("RD=%d,A0=%d,WR=%d,A1=%d,B5=%d\n",RD,A0,WR,A1,B5);

if(eData&(0xD0)) return;

if(eURTK.rstep[3])
	{
	if((WR==1)&&(RD==0)){
		eURTK.rstep[1]=0;
		eURTK.rstep[2]=0;
		eURTK.rstep[3]=0;

		eURTK.wstep[1]=0;
		eURTK.wstep[2]=0;
		eURTK.wstep[3]=0;
		}
	return;
	}

if((A0==0)&&(A1==0))//piwem v RC (opredelyaem re*im)
		{
	if(eURTK.wstep[1]==0)
		{
		if((RD==0)&&(WR==1)&&(B5==0)){eURTK.wstep[1]=1;return;}
		}
	if(eURTK.wstep[2]==1)
		{
		if((RD==0)&&(WR==0)&&(B5==0)){eURTK.wstep[3]=1;return;}
		}
	if(eURTK.wstep[3]==1)
		{
		if((RD==0)&&(WR==1)&&(B5==0))
			{
			//eURTK.wstep[4]=1;
			eURTK.mode=eURTK.BufData;
			eURTK.wstep[1]=0;
			eURTK.wstep[2]=0;
			eURTK.wstep[3]=0;
			return;
			}
		}
	}

if((A0==1)&&(A1==1))//piwem v RD (idet zapis) ili 4itaem
	{
	if(eURTK.rstep[1]==1)
		{
		if((B5)&&(RD)&&(A0)&&(A1)&&(WR)){eURTK.rstep[2]=1;return;}
		}
	
	if(eURTK.wstep[2]==1)
		{
		if((RD==0)&&(WR==0)&&(B5==0)){eURTK.wstep[3]=1;return;}
		}
	if(eURTK.wstep[3]==1)
		{
		if((RD==0)&&(WR==1)&&(B5==0))
			{
			if(eURTK.mode==0x11)
				{
				WriteUserData();
				//printf("piwem=%d",eURTK.BufData);
				if(eURTK.WhatDVG==0)eURTK.WhatDVG=1;else eURTK.WhatDVG=0;
				}
			eURTK.wstep[1]=0;
			eURTK.wstep[2]=0;
			eURTK.wstep[3]=0;
			return;
			}
		}
	//if(eURTK.wstep[1]==0)
	//	{
		if((RD==0)&&(WR==1)&&(B5==0)){eURTK.wstep[1]=1;return;}
	//	}
	}




}