En la definicion de tu funcion motor() veo lo siguiente:
El operador && es el operador logico "and" el cual solo devuelve verdadero (generalmente 1) si ambas expresiones son verdaderas *x e *y, y falso (0) en los demas casos.
En el lenguaje C desde sus comienzos no existe el tipo bool, en su defecto se consideraba cualquier valor numerico distinto de cero como verdadero y el valor numerico cero como falso. En la mayoria de compiladores verdadero suele corresponder con el valor 1.
Para que me entiendas un poco mejor, un if por ejemplo
if(condicion)
enunciado;
Evalua la condicion comprobando su valor numerico, si la condicion vale 1 entonces ejecuta el enunciado y si no vale 1 no ejecuta el enunciado.
En tu codigo
A la variable res le estas asignando el valor 1 en el caso de que *x e *y tengan el mismo valor, y el valor 0 en caso contrario. Cuando despues haces
switch(res)
{
case 1: for(i=0; !kbhit(); i++)
outport(0x378, a);
break;
case 2: for(i=0; !kbhit(); i++)
outport(0x378, b);
break;
case 3: for(i=0; !kbhit(); i++)
outport(0x378, c);
break;
case 4: for(i=0; !kbhit(); i++)
outport(0x378, d);
break;
La variable res solo podra ejecutar el case 1: ya que solo podra tener el valor 1 o el valor 0.