📄 psmain.cpp
字号:
//SIMDAT+SIMSTEP
//plf open file to get .hex\strfilv\eeprom\-+
//run .hex opcode
//spp:intr;;call;;ret
//1.MainFrm.cpp:
//1)Oncreat:settimer;
//2)OnTimer:KillTimer;dat2simrun;dispval;
//PeekMessage;//有消息在等待吗?;
//TranslateMessage; //翻译消息;PostMessage
//brk route//step disasm disp//step stack disp
//disp filv---simdatval//step val//filv val modify
//ly0,1 for system
//ly2...for filv simdat disp
//3)WindowProc:SetTimer
//2....View.cpp:
//1)call getkch:sim function by kwyboard;
//2)call getBSTEP:for modify val;;;brk step
//3)OnChar:simulate with keyboard
/////*****/////*****/////*****/////*****/////*****
//3.psmain.cpp
//1)dat2simrun:siminit;simmain
//2)hex2dat:call plfopen;read *.eem;etc;output *dis.asm
//3)disasmpro(int idis):get data from *.hex;run dath.m.l.opcode
//4)plfopen:open *.plf(from hex2dat());;simdatdsp(get filv[]---name)
//psrun.plf====rundatdsp:brk0,1,2,BSTEP,BASTEP,BCYCLE,ACYCLE
//psrunXXXX.plf====simXXXXdatdsp:CPPPC,simdatstr and filv val
//5)include all-dvc.cpp
//6)getfilvdat()::for simdatval;;simdatstr;;simdatcnt
//7)getpsrundat()::for rundatval
//4.pssim.cpp
//1)gettmr0;
//2)gettmr1;
//3)gettmr2;
//4)getintr;
//5)getadcc
//6)getBSTEP:+-BSTEP...+-filv[]...//brk0,1,2:::kch=asdFGHzxCVbNM
/////////, valset Bpc==,f0==,f1==,f2!=,Rf0x,dFstr
/////////c v valsetpt
/////////n m valsetval
/////////a b0/s b1/d b2/f bf0/g bf1/h bf2
/////////Z:CC BC BS BA X:BA BS BC CC
//7)runinidisp:for rundatdisp ini;;;rundatstr[]=""
//psval.h====#define ly0...,rundatcnt,rundatstr,rundatval,strrunDSP;
//#define simdatcnt,simdatstr,simdatval,strsimDSP;
/////*****/////*****/////*****/////*****/////*****
//8)char * dspsimdatval(char ival);
//5.simdat.cpp
//1)siminidisp: filv[]:simdatstr[]=""
//simval.h====only for XXXX sim
//6.simstep.cpp
//1)siminit:hex2dat();
//2)simmain:breakpc;disasmpro(pc);gettmr0;etc
//3)dspval:_itoa(filv[modev],str,10);
//4)getkch:simulate with keyboard
//5)getcode:simulate display
//7.ps18dis.cpp
//1)disasmpro(pc)
//2)brkpc....1...2...3
//11.simds1302.cpp;
//12.simeeprom.cpp;
//13.sim74595.cpp;
//14.sim74165.cpp
//15.simht1621.cpp
//16.sim24cxx1.cpp
//include all-dvc.cpp
#include "f:\zmz\psmain\pssim.cpp"
#include "f:\zmz\psmain\psdis.cpp"
#include "f:\zmz\psmain\simds1302.cpp"
#include "f:\zmz\psmain\simeeprom.cpp"
//#include "f:\zmz\psmain\sim74595.cpp"
#include "f:\zmz\psmain\sim74165.cpp"
#include "f:\zmz\psmain\sim24cxx1.cpp"
#include "f:\zmz\psmain\simht1621.cpp"
//---------dat2simrun
//---------dat2simrun
//---------dat2simrun
//---------dat2simrun
void dat2simrun(void)
{
siminit();
simmain();
}
//---------hex2dat
//---------hex2dat
//---------hex2dat
//---------hex2dat
void hex2dat(void)
{
int orgx=0;
char ccc[47];
int i,j;
char cnt;
int dat;
int addr,addrold;
char ln1[100];
char ln2[100];
char lnst,lnend;
char k;
CFile destFile;
CFile myFile;
for(i=0;i<30;i++)
{
lyxx[i]=ly0+i*15;
}
strspold[0]=0x20;
strspold[1]=0x20;
strspold[2]=0x20;
strspold[3]=0x0;
strsp111[0]='=';
strsp111[1]=0x20;
strsp111[2]=0x20;
strsp111[3]=0x0;
siminidisp();
runinidisp();
strcpy(ln1,m_fName);
i=strlen(ln1);
if(!i)
{
strcpy(ln2,"psrun.plf");
}
strcpy(ln1,plfopen(ln2));
if(fileerr)
{
return;
}
runinidisp();
strcpy(fat24xx,ln1);
i=strlen(fat24xx);
fat24xx[--i]='x';
fat24xx[--i]='4';
fat24xx[--i]='2';
rdat24xx();
strcpy(ln2,ln1);
i=strlen(ln2);
ln2[--i]='d';
ln2[--i]='x';
ln2[--i]='t';
subfFile.Open(ln2, CFile::modeWrite);
if(subfFile==-1)
{
subfFile.Open(ln2, CFile::modeCreate);
if(subfFile==-1)
{
fileerr=1;
strcpy(strCFile,"subfFile Create error!");
return;
}
subfFile.Close();
subfFile.Open(ln2, CFile::modeWrite);
if(subfFile==-1)
{
fileerr=1;
strcpy(strCFile,"subfFile Write error!");
return;
}
}
strcpy(frtxt,ln1);
i=strlen(frtxt);
frtxt[++i]=0;
frtxt[--i]='t';
frtxt[--i]='x';
frtxt[--i]='t';
frtxt[--i]='.';
frtxt[--i]='r';
rtxtFile.Open(frtxt, CFile::modeCreate);
if(rtxtFile==-1)
{
fileerr=1;
strcpy(strCFile,"frtxtFile Create error!");
return;
}
rtxtFile.Close();
strcpy(feeprom,ln1);
i=strlen(feeprom);
feeprom[--i]='m';
feeprom[--i]='e';
feeprom[--i]='e';
rdeeprom();
strcpy(fds1302,ln1);
i=strlen(fds1302);
fds1302[--i]='m';
fds1302[--i]='s';
fds1302[--i]='d';
rdds1302();
strcpy(ln2,ln1);
i=strlen(ln2);
ln2[++i]=0;
ln2[--i]='m';
ln2[--i]='s';
ln2[--i]='a';
ln2[--i]='.';
ln2[--i]='d';
myFile.Open(ln1, CFile::modeReadWrite);
if(myFile==-1)
{
fileerr=1;
strcpy(strCFile,"hexFile Open error!");
return;
}
destFile.Open(ln2, CFile::modeCreate);
if(destFile==-1)
{
fileerr=1;
strcpy(strCFile,"disFile Create error!");
return;
}
destFile.Close();
destFile.Open(ln2, CFile::modeWrite);
if(destFile==-1)
{
fileerr=1;
strcpy(strCFile,"disFile Wreate error!");
return;
}
for(i=0;i<10000;i++)
{
datx[i]=0;
dath[i]=0xFF;
}
BOOL CCCC=TRUE;
ln1[00]=0;
ln2[00]=0;
lnst=100;
lnend=0;
while(CCCC)
{
if(addr>=0xef8)
{
addr=addr;
}
for(i=0;i<47;i++)
{
ccc[i]=0;
}
myFile.Read(ccc,46);//10);
i=strlen(ccc);
j=46;
if(i<46)
{
CCCC=FALSE;
if(i>0)
{
j=i;
}
}
strcat(ln1,ccc);
j=strlen(ln1);
lnst=127;
for(i=0;i<j;i++)
{
if(ln1[i]==':')
{
lnst=i;
}
else if((ln1[i]==10)||(ln1[i]==13))
{
lnend=i;
if(lnend>lnst)
{
cnt=0;
for(k=0;k<2;k++)
{
lnst++;
if(ln1[lnst]>=0x61)
{
cnt=cnt*16+ln1[lnst]-0x57;
}
else if(ln1[lnst]>=0x41)
{
cnt=cnt*16+ln1[lnst]-0x37;
}
else
{
cnt=cnt*16+ln1[lnst]-0x30;
}
}
if(cnt==0)
{
CCCC=FALSE;
break;
}
addrold=addr;
addr=0;
for(k=0;k<4;k++)
{
lnst++;
if(ln1[lnst]>=0x61)
{
addr=addr*16+ln1[lnst]-0x57;
}
else if(ln1[lnst]>=0x41)
{
addr=addr*16+ln1[lnst]-0x37;
}
else
{
addr=addr*16+ln1[lnst]-0x30;
}
}
addr/=2;
if(addrold>addr)
{
CCCC=FALSE;
break;
}
cnt/=2;
lnst+=4;
while(cnt--)
{
//dat=0;
lnst++;
if(ln1[lnst]>=0x61)
{
dath[addr]=ln1[lnst]-0x57;
}
else if(ln1[lnst]>=0x41)
{
dath[addr]=ln1[lnst]-0x37;
}
else
{
dath[addr]=ln1[lnst]-0x30;
}
lnst++;
if(ln1[lnst]>=0x61)
{
datm[addr]=ln1[lnst]-0x57;
}
if(ln1[lnst]>=0x40)
{
datm[addr]=ln1[lnst]-0x37;
}
else
{
datm[addr]=ln1[lnst]-0x30;
}
lnst-=4;
for(k=0;k<2;k++)
{
if(ln1[++lnst]>=0X61)
{
datl[addr]=datl[addr]*16+ln1[lnst]-0X57;
}
else if(ln1[lnst]>=0x40)
{
datl[addr]=datl[addr]*16+ln1[lnst]-0x37;
}
else
{
datl[addr]=datl[addr]*16+ln1[lnst]-0x30;
}
}
//datl[addr]=dat;
datx[addr]|=1;
if(dath[addr]==2)
{
datx[(datm[addr]&7)*256+datl[addr]]|=0x80;
}
lnst+=4;
addr++;
addrold=addr;
}
k=0;
for(i=lnst-1;i<j;i++)
{
ln1[k++]=ln1[i];
}
ln1[k]=0;
lnst=127;
j=k;
i=0;
}
}
}
}
myFile.Close();
simrun=FALSE;
strcpy(ccc," org 0x0");
j=strlen(ccc);
ccc[j++]=13;
ccc[j++]=10;
ccc[j]=0;
destFile.Write(ccc,j);
for(i=0;i<addrold;i++)
{
if(datx[i])
{
if(orgx!=i)
{
strcpy(ccc," org 0x");
strcat(ccc,_itoa(i,ln1,16));
j=strlen(ccc);
ccc[j++]=13;
ccc[j++]=10;
ccc[j]=0;
destFile.Write(ccc,j);
}
orgx=i+1;
if((datx[i]&0x80))
{
strcpy(ln2,"x");
strcat(ln2,_itoa(i,ln1,16));
}
else
{
ln2[0]=0;
}
j=strlen(ln2);
for(;j<8;j++)
{
ln2[j]=' ';
}
ln2[j]=0;
strcpy(datstr[i],disasmpro(i));
strcat(ln2,datstr[i]);//disasm16m(i));
j=strlen(ln2);
ln2[j++]=13;
ln2[j++]=10;
ln2[j]=0;
destFile.Write(ln2,j);
}
}
strcpy(ln2," END");
j=strlen(ln2);
ln2[j++]=13;
ln2[j++]=10;
ln2[j]=0;
destFile.Write(ln2,j);
destFile.Close();
}
//---------char * plfopen(char fln[100])
//---------char * plfopen(char fln[100])
//---------char * plfopen(char fln[100])
//---------char * plfopen(char fln[100])
char * plfopen(char fln[100])
{//get fin
int orgx=0;
char ccc[47];
int i,j;
int cnt;
int addr;
char ln1[100];
char ln2[100];
char ln3[100];
char ln4[100];
char fin[100];
char lnst,lnend;
char k;
BOOL CCCC=TRUE;
CFile myFile;
strcpy(psrunFstr,fln);
myFile.Open(psrunFstr, CFile::modeReadWrite);
if(myFile==-1)
{
fileerr=1;
strcpy(strCFile,"psrunFile Open error!");
ln1[0]=0;
return ln1;
}
lnst=100;
lnend=0;
addr=0;
ln1[0]=0;
while(CCCC)
{
if(addr>=2080)
{
addr=addr;
}
for(i=0;i<47;i++)
{
ccc[i]=0;
}
myFile.Read(ccc,46);//10);
i=strlen(ccc);
j=46;
if(i<46)
{
CCCC=FALSE;
if(i>0)
{
j=i;
}
}
strcat(ln1,ccc);
j=strlen(ln1);
lnst=0;
for(i=0;i<j;i++)
{
if((ln1[i]==13)||(ln1[i]==10)||(ln1[i]==0))
{
for(;1;)
{
if((ln1[lnst]>=48)||(ln1[lnst]=='.'))
{
ln2[lnst]=ln1[lnst++];
}
else
{
break;
}
}
ln2[lnst]=0;
if(!strlen(ln2))
{
CCCC=FALSE;
break;
}
if(addr==0)
{
strcpy(fin,ln2);
addr++;
}
else if(addr==1)
{
strcpy(ln3,ln2);
addr++;
}
else if(addr==2)
{
strcpy(ln4,ln2);
addr=1;
cnt=0;
k=strlen(ln4);
for(i=2;i<k;i++)
{
if(ln4[i]>=0x61)
{
cnt=cnt*16+ln4[i]-0x57;
}
else if(ln4[i]>64)
{
cnt=cnt*16+ln4[i]-55;
}
else
{
cnt=cnt*16+ln4[i]-48;
}
}
getpsrundat(ln3,cnt);
}
for(;lnst<j;)
{
if(ln1[lnst++]>=48)
{
break;
}
}
lnst--;
for(k=0;lnst<j;)
{
ln1[k++]=ln1[lnst++];
}
j=k;
ln1[j]=0;
lnst=0;
i=0;
}
}
}
myFile.Close();
strcpy(psrunFln0,fin);
i=strlen(psrunFln0);
psrunFln0[i++]=13;
psrunFln0[i++]=10;
psrunFln0[i]=0;
myFile.Open(fin, CFile::modeReadWrite);
if(myFile==-1)
{
fileerr=1;
strcpy(strCFile,"plfFile Open error!");
ln1[0]=0;
return ln1;
}
lnst=100;
lnend=0;
addr=0;
ln1[0]=0;
CCCC=TRUE;
while(CCCC)
{
if(addr>=2080)
{
addr=addr;
}
for(i=0;i<47;i++)
{
ccc[i]=0;
}
myFile.Read(ccc,46);//10);
i=strlen(ccc);
j=46;
if(i<46)
{
CCCC=FALSE;
if(i>0)
{
j=i;
}
}
strcat(ln1,ccc);
j=strlen(ln1);
lnst=0;
for(i=0;i<j;i++)
{
//if((ln1[i]==13)||(ln1[i]==10)||(ln1[i]==0x20)||(!ln1[i]))
if((ln1[i]<48)&&(ln1[i]!='.'))
{
for(;1;)
{
if((ln1[lnst]>=48)||(ln1[lnst]=='.'))
{
ln2[lnst]=ln1[lnst++];
}
else
{
break;
}
}
ln2[lnst]=0;
if(strlen(ln2))
{
if(addr==0)
{
strcpy(fin,ln2);
addr++;
}
else if(addr==1)
{
strcpy(ln3,ln2);
addr++;
}
else if(addr==2)
{
strcpy(ln3,ln2);
addr++;
}
else if(addr==3)
{
strcpy(ln4,ln2);
addr=2;
cnt=0;
k=strlen(ln4);
for(i=2;i<k;i++)
{
if(ln4[i]>=0x61)
{
cnt=cnt*16+ln4[i]-0x57;
}
else if(ln4[i]>64)
{
cnt=cnt*16+ln4[i]-55;
}
else
{
cnt=cnt*16+ln4[i]-48;
}
}
getfilvdat(ln3,cnt);
}
}
while(lnst<j)
{
if(ln1[lnst++]>=48)
{
break;
}
}
if(lnst>=j)
{
ln1[0]=0;
break;
}
lnst--;
for(k=0;lnst<j;)
{
ln1[k++]=ln1[lnst++];
}
j=k;
ln1[j]=0;
i=0;
lnst=0;
}
}
}
myFile.Close();
// LPCTSTR lpszString;
// lpszString=fin;
CWnd* m_pMainWnd=AfxGetMainWnd(); // main window (usually same AfxGetApp()->m_pMainWnd)
m_pMainWnd->SetWindowText(fin);//lpszString);
return fin;
}
//getfilvdat(ln3,cnt);
//getfilvdat(ln3,cnt);
//getfilvdat(ln3,cnt);
//getfilvdat(ln3,cnt);
void getfilvdat(char ln3[100],int cnt)
{
char i,j;
if(!strcmp(ln3,"CPPPC"))
{
CPPPC=cnt;
}
else
{
j=0;
//////////////////////////////same access filv
switch(cnt)
{
case 0x101:
case 0x181:
case 0x106:
case 0x186:
{
cnt&=0xff;
break;
}
case 0x82:
case 0x102:
case 0x182:
case 0x83:
case 0x103:
case 0x183:
case 0x84:
case 0x104:
case 0x184:
case 0x8A:
case 0x10A:
case 0x18A:
case 0x8B:
case 0x10B:
case 0x18B:
{
cnt&=0x7f;
break;
}
default:
{
break;
}
}
if((cnt&0x7f)>0x6f)
{
cnt&=0x7f;
}
//////////////////////////////same access filv
for(i=0;i<simdatcnt;i++)
{
if(!strcmp(ln3,simdatstr[i]))
{
j=1;
simdatval[i]=cnt;
}
}
if(!j)
{
strcpy(simdatstr[simdatcnt],ln3);
simdatval[simdatcnt++]=cnt;
}
}
}
//getpsrundat(ln3,cnt);
//getpsrundat(ln3,cnt);
//getpsrundat(ln3,cnt);
//getpsrundat(ln3,cnt);
void getpsrundat(char ln3[100],int cnt)
{
char i;
for(i=0;i<rundatcnt;i++)
{
if(!strcmp(ln3,rundatstr[i]))
{
rundatval[i]=cnt;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -