/*--------------------------------------------------------*\ | FICHEIRO: vsr-sw.c | | DATA: 08-05-96 | | AUTOR: AntÓnio Esteves | | | | Operações do VSR implementado em s/w. | | | \*--------------------------------------------------------*/ #include #include "edgar-hw.h" #include "datadef.h" #ifdef T32 #include #endif #ifdef T16 #include #endif /*-------------- ESQUEMA DO VSR EM S/W ------------------*\ VIN (8 bits) 7 6 ... 0 _______________________________ 63 | 31 | | | | | | | | | | | | msw | vsr | vsr | | vsr | | | [0][7]| [0][6]| ... | [0][0]| 64 => | 0 | ______|_______|_____ |_______| => 64 bits bits | 31 | | | | | | lsw | | | | | | | vsr | vsr | ... | vsr | | | [1][7]| [1][6]| | [1][0]| 0 | 0 |_______|_______|_______|_______| VOUT (8 bits) \*---------------------------------------------------------*/ void TagImage(void) /* Igual a rotate_imag() sem HOLD_MS */ { int i,j; WORD temp[SIZE]; for(i=0;i rotate_imag() | | | | Preenche a tag de cada PE com o lsb (B0) vindo do VSR. | | Envia a tag de cada PE para o msb (B7) do VSR e faz a | | rotacao do VSR. | | | \*---------------------------------------------------------*/ void write_image(void) { int i,j; WORD temp[SIZE]; ms[0]=msbak[0]; /* hold ms */ ms[1]=msbak[1]; for(i=0;i da linha */ if (vsr_tmp == 0) VOUT[num_chip] |= VALORNULO[i]; /* para o IF demorar o mesmo que o ELSE */ else VOUT[num_chip] |= PESOBIT[i]; /* bit de VOUT = bit <0> da linha */ vsr[1][i] = vsr[1][i] >> 1; /* os bits <30-0> tomam os valores dos bits <31-1> */ vsr_tmp = vsr[0][i] & (WORD)1; /* bit <32> da linha */ vsr_tmp = vsr_tmp << 31; vsr[1][i] = vsr[1][i] | vsr_tmp; /* o bit <31> toma o valor do bit <32> */ vsr[0][i] = vsr[0][i] >> 1; /* os bits <62-32> tomam os valores dos bits <63-33> */ vsr_tmp = (((char)VIN[num_chip] & PESOBIT[i])!=0) ? 0x80000000 : 0; vsr[0][i] = vsr[0][i] | vsr_tmp; /* o bit <63> da linha toma o valor do bit de VIN */ } } /*-------------------------------------------------------*\ | inicializarVsr() | | | | Funcao que preenche o VSR com os valores iniciais. | | Cada coluna fica com o seu numero de ordem (63 a 0). | | | \*-------------------------------------------------------*/ void inicializarVsr(void) { int n; for(n=0;n<64;++n) { VIN[num_chip] = (char)n; shiftVsr(); } }