/****************************************************************\ * * * Ficheiro: PE.C * * Alteração: 08-05-96 * * Alterado por: Antonio Esteves * * * \****************************************************************/ #include #include #include #include "data.h" #include "edgar-hw.h" #ifdef T32 #include #endif #ifdef T16 #include #endif #ifdef DEBUG #include "teste.c" #endif int main(int argc, char *argv[]) { WORD opcode, i, NI; clock_t tI, tF, TT=0; #ifdef TEMPO_PARCIAL clock_t t1, t2, t3, t4; double tpbl, tpe, maxT=0, TTpbl=0, TTpe=0; #endif #ifdef DEBUG int ins=-1; #endif if(argc < 3) { printf("\n Chame o Programa com:\n\trun-btl \n"); exit (1); } #ifdef VSR_EM_SW printf("Esta a Utilizar o VSR em S/W\n"); for(i=0; i0) ? (2*PESOBIT[i-1]) : 1; VALORNULO[i]=0; } #endif #ifdef T32 ProcGetPriority(); /* Devolve 0/1 se o processo e de alta/baixa prioridade */ /*---- inicializar os F/Fs de RESET e notREPROGRAM ----------*/ ClearFfsResetReprogram (); /*----------- programar a lca que funcioana como VSR --------*/ programarLca((unsigned long *) LCA1, argv[2]); /*--- programar a lca que funciona como interface do VSR ----*/ programarLca((unsigned long *) LCA0, argv[3]); addVsrCs=ADD_VSRCS_LCA1; add4Interface=ADD4_LCA0; #endif #ifdef T16 ProcGetPriority(); /* Devolve 0/1 se o processo e de alta/baixa prioridade */ /*---- inicializar os F/Fs de RESET e notREPROGRAM ----------*/ ClearFfsResetReprogram (); /*----------- programar a lca que funcioana como VSR --------*/ programarLca((unsigned long *) LCA1, argv[2]); /*--- programar a lca que funciona como interface do VSR ----*/ programarLca((unsigned long *) LCA0, argv[3]); addVsrCs=ADD_VSRCS_LCA1; add4Interface=ADD4_LCA0; #endif inicializarVsr(); inicializacoes (&NI, argv[1]); for(i=0; i(NINSTRUCOES-1)) || (opcode<0)) erro ("\nOpcode Invalido!!\n"); else PE_ROM[opcode] (); #ifdef TEMPO_PARCIAL t3 = clock(); #endif pbl (1); /* FuncÆo do PBL se for pbl_write() */ tF = clock(); TT+=(tF-tI); #ifdef TEMPO_PARCIAL t4 = clock(); #endif #ifdef TEMPO_PARCIAL printf("T1 %ld ",t1); printf("T2 %ld ",t2); printf("T3 %ld ",t3); printf("T4 %ld ",t4); tpbl = (double)(t2-t1+t4-t3)/(double)CLOCKS_PER_SEC; tpe = (double)(t3-t2)/(double)CLOCKS_PER_SEC; TTpbl += tpbl; TTpe += tpe; printf ("\nTempos:"); printf (" PBL %g\tPE %g\tTotal: %g", tpbl, tpe, tpbl+tpe); if ((tpbl+tpe) >= maxT) { maxT = tpbl+tpe; ins = i+1; } #endif } printf("\nTtotal=%ld Tmedio=%g ",TT, (double)(TT) / ((double)CLOCKS_PER_SEC *(double)NI)); #ifdef DEBUG sprintf (prev,actual); sprintf (actual,"\n... Programa terminado ...\n"); if (breakpoint) teste (); #endif #ifdef TEMPO_PARCIAL printf("\nInst.+ demorada: %g ms, instr. %d.",maxT*1000,ins); printf("\nTTpbl=%g TTpe %g",TTpbl/NI,TTpe/NI); #endif printf ("\n... Programa Terminado ...\n"); } /*****************************************************************/ void inicializacoes (WORD *ninst, char *file) { WORD i; char myprog[40], myxip[40], str[100]; init_rom(); sprintf (actual," ... Inicio do Programa ..."); for (i=0; i<64; i++) pblr[i]='2'; strcpy (myprog,file); strcat (myprog,".PRG"); prog = fopen(myprog,"r"); if (!prog) { printf("\nImpossivel abrir o ficheiro "%s\".\n\n",myprog); exit (1); } #ifdef T32 fscanf (prog,"%d", ninst); fgets (str, 99, prog); printf ("\n***%s*** O programa contem %d instrucoes.\n", str, *ninst); #endif #ifdef T16 fscanf (prog,"%ld", ninst); fgets (str, 99, prog); printf ("\n***%s*** O programa contem %ld instrucoes.\n", str, *ninst); #endif #ifdef PC fscanf (prog,"%ld", ninst); fgets (str, 99, prog); printf ("\n***%s*** O programa contem %ld instrucoes.\n", str, *ninst); #endif strcpy (myxip,file); strcat (myxip,".XIP"); #ifdef DEBUG LoadChip (myxip); #endif } /*****************************************************************/ void erro (char *s) { perror (s); #ifdef DEBUG teste(); #endif }