/*-------------------------------------------------------------*/ /* FICHEIRO: DATADEF.H */ /* AUTOR: António J. A. Esteves */ /* DATA: 17 Maio 1996 */ /* */ /* Este ficheiro é idêntico a DATA.H, com a excepção de */ /* não definir variáveis, apenas as declara. É utilizado */ /* em todos os ficheiros '*.C' excepto no que contém o main() */ /*-------------------------------------------------------------*/ #include /*---------------------- OPÇÕES DE COMPILAÇÃO ---------------------*/ /* #define PC */ /* Para correr num 80x86 */ #define T32 /* Para correr num Transputer */ #define VSR_EM_SW /* Para usar a versao de S/W do VSR */ /* #define TEMPO_PARCIAL */ /* Para calcular e apresentar os */ /* tempos em varias fases da execução */ /* das instruções */ #define DEBUG /* Para ter acesso ao menu de depuração*/ /*-----------------------------------------------------------------*/ #ifdef PC /* PC com inteiros de 16 bits */ typedef long WORD; typedef unsigned long UWORD; #define SIZE 2 #define PALAVRA 32 #define WORD_UM 0xFFFFFFFF /* Palavra de 32 bits */ #endif #ifdef T32 /* Transputer com palavra de 32 bits */ typedef int WORD; typedef unsigned int UWORD; #define SIZE 2 #define PALAVRA 32 #define WORD_UM 0xFFFFFFFF /* Palavra de 32 bits */ #endif #ifdef T16 /* Transputer com palavra de 16 bits */ typedef int WORD; typedef unsigned int UWORD; #define SIZE 4 #define PALAVRA 16 #define WORD_UM 0xFFFF /* Palavra de 16 bits */ #endif /*-----------------------------------------------------------------*/ #define NINSTRUCOES 66 /* incluiu-se a função shift_vsr() */ #define NCHIPS 100 extern int num_chip; extern int posFirst[4]; extern char VOUT[NCHIPS]; /* valor devolvido por shiftVsr() */ extern char VIN[NCHIPS];/* valor a enviar para o VSR por shiftVsr()*/ /*-----------------------------------------------------------------*/ #define WORD_ZERO (WORD)0 #define COLUNCAM 64 #define PES_CHIP 64 #define BITSSUBSET 4 #define ZERO 0 #define UM 1 #define DCARE 2 /*-----------------------------------------------------------------*/ extern WORD cam[COLUNCAM][SIZE]; /* 64 bits = */ extern WORD sub[BITSSUBSET][SIZE]; extern WORD pos1,pos2; extern char patt1[9], patt2[9]; /* 8+Terminador string(ver fetch.c)*/ extern char subset[BITSSUBSET+1]; extern char actual[100], prev[100]; /* fetch.c */ extern WORD inst2, breakpoint; /*--------------------------- PEs e CAM ---------------------------*/ extern WORD md0[SIZE];/* =1 se houver match de todos os 0s, =0 no */ /* caso contrário */ extern WORD md1[SIZE];/* =1 se houver match de todos os 1s, =0 no */ /* caso contrário */ extern WORD ms[SIZE];/* =1 se houver match subset,=0 caso contrário*/ extern WORD msbak[SIZE]; /*----------------------------------- PEs -------------------------*/ extern WORD tag[SIZE]; extern WORD cy[SIZE]; /*----------------------------------- PBL -------------------------*/ extern char pblr[COLUNCAM]; /* Estruturas necessárias para comunicar com o exterior do chip */ /*-----------------------------------------------------------------*/ #define RESET 0 #define SET 1 extern WORD AltIn[SIZE], Enable[SIZE]; /* Ver PE_ROM.C */ extern WORD FirstIn[SIZE]; extern WORD linhas; /*============== Tabela de apontadores para as funções ============*/ /*-----------------------------------------------------------------*/ extern void (*PE_ROM[NINSTRUCOES])(void);/* Inicializar: init_rom()*/ extern void inicializacoes (WORD * , char *); extern void erro (char *); extern void util_tags(int); /* Usados p/ comunicar entre os PEs e o PBLR, em operações read */ /*-------- Se linhacam=-1 usar tag2 senão usar linhacam ----------*/ extern WORD linhacam, tag2[SIZE]; extern FILE *prog; /*------- para usar a versão do VSR implementado em sw ------------*/ /*-----------------------------------------------------------------*/ #ifdef VSR_EM_SW #define COLUNVSR 8 extern WORD vsr[SIZE][COLUNVSR]; extern char PESOBIT[COLUNVSR], VALORNULO[COLUNVSR]; #endif /*--------------------------------------------------------*\ Endereços físicos para comunicar com o exterior do chip. NOVO: Passaram a ser variáveis (uma por chip). \*--------------------------------------------------------*/ extern WORD EVSR0[NCHIPS], EVSR1[NCHIPS], EINSTRUCAO[NCHIPS]; extern char EFLAGS_IN[NCHIPS], EFLAGS_OUT[NCHIPS]; extern WORD EPATT0[NCHIPS], EPATT1[NCHIPS]; extern char EPOS0[NCHIPS], EPOS1[NCHIPS], ESUBSET[NCHIPS]; /*-----------------------------------------------------------------*/ /* Máscaras para manipular as flags */ #define TAGUPABOVE 1 /* tagUp e tagAbove -----------+ */ #define TAGDOWNBELOW 2 /* tagDown e tagBelow ----+ | */ #define FIRSTINOUT 4 /* firstIn e fisrtOut --+ | | */ #define ALTINOUT 8 /* altIn e altOut ---+ | | | */ #define ENABLEINOUT 16 /* e..In e e..Out--+ | | | | */ #define TAGOUT 32 /*----+ | | | | | */ #define CARRYOUT 64 /*-+ | +----------+ | | | | */ | | | | | | | +-------+ | | +-----+ | | | /* | +-----+ | | +--+ | | | | | | | | | 7 6 5 4 3 2 1 0 +------------------------------------------------+ Flags IN | X X X ENIN ALTIN FSIN TGB TGA | +------------------------------------------------+ +------------------------------------------------+ Flags OUT | X CYOUT TGOUT ENOUT ALTOUT FSOUT TGD TGU | +------------------------------------------------+ 7 6 5 4 3 2 1 0 */ /* Úteis para alt(), tag_alt(), carry_alt(), first() */ /*-----------------------------------------------------------------*/ #define ALT 0 #define TAG_ALT 1 #define CARRY_ALT 2 #define BLOCO 10 #define CHIP 11 #define ARRAY 12 #define CONTINUE 13 #define CICLICO 14 extern char rbrs[NCHIPS][COLUNCAM/2];