Ir para conteúdo
Fórum Script Brasil
  • 0

Codigo


maria

Pergunta

oi me pode ajudar a perceber o q este código faz:

void CJoyScan::joystickScan(int v[4], char b[4])

{

// v = Resistorvalues: int Values between 0-700

// b = Buttonswitchvalues: int Values between 0-1 --> char type used to save memory

int i, j;

int mask = 15;

_outp(JPORT, 0);

for (i=1; mask && i<CMAX; i++) {

j = _inp(JPORT) ^ mask;

if (j & 1) { v[0] = i; mask ^= 1; }

if (j & 2) { v[1] = i; mask ^= 2; }

if (j & 4) { v[2] = i; mask ^= 4; }

if (j & 8) { v[3] = i; mask ^= 8; }

}

j = _inp(JPORT);

b[0] = !(j & 0x10);

b[1] = !(j & 0x20);

b[2] = !(j & 0x40);

b[3] = !(j & 0x80);

}

n entendo nada!!por favor me dê uma dica

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Resumindo, acho que é isto:

void CJoyScan::joystickScan(int v[4], char b[4])
{
// v = Resistorvalues: int Values between 0-700
// b = Buttonswitchvalues: int Values between 0-1 --> char type used to save memory

int i, j;
int mask = 15;


// Aqui você esta escrevendo na porta "JPORT" o valor 0.
// JPORT deve estar definida em algum ponto do seu programa e zero "desliga" tos os bit's desta porta 
// Se não me engano a porta do Joystick é 0x201
_outp(JPORT, 0);


for (i=1; mask && i<CMAX; i++) {

//Aqui esta fazendo a leitura em "JPORT" e J esta fazendo um XOR com o que foi recebido. 
j = _inp(JPORT) ^ mask;

//Verifica se bit 1 esta ligado (0000 0001) e caso positivo, deixa mask = xor 1 
if (j & 1) { v[0] = i; mask ^= 1; }
//Verifica se bit 2 esta ligado (0000 0010)e deixa mask = xor 2
if (j & 2) { v[1] = i; mask ^= 2; }
//Verifica se bit 4 esta ligado (0000 0100)e deixa mask = xor 4
if (j & 4) { v[2] = i; mask ^= 4; }
//Verifica se bit 8 esta ligado (0000 1000)e deixa mask = xor 8
if (j & 8) { v[3] = i; mask ^= 8; }
}

//Aqui faz a leitura em "JPORT"
j = _inp(JPORT);
//Muda valor De b[0] se bit 10 estiver ligado (0001 0000)
b[0] = !(j & 0x10);
//Muda valor De b[1] se bit 20 estiver ligado (0010 0000)
b[1] = !(j & 0x20);
//Muda valor De b[0] se bit 40 estiver ligado (0100 0000)
b[2] = !(j & 0x40);
//Muda valor De b[3] se bit 80 estiver ligado (1000 0000)
b[3] = !(j & 0x80);
}

Caso eu esteja errado, por favor me corrijam.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...