Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: ZüNdFoLGe en 08 de Diciembre de 2006, 11:58:50 AM

Título: cargando memoria ROM en C++
Publicado por: ZüNdFoLGe en 08 de Diciembre de 2006, 11:58:50 AM
Debo cargar una ROM que recibe 2 numeros enteros en representacion BCD empaquetado de 2 digitos y devuelve el resultado de una operación entre ambos también en BCD (que en este sentido no importa). El tema de la operación es sencillo, lo que no entiendo es qué es lo que hace el siguiente código de carga inicial:




int cargar(int direccion) {
  // se extrae el primer BCD de 1 byte, pero porqué el and y el shiftR ?
  bcd1 = (direccion & 65280) >> 8; // porqué un and con 65280 ???
  bcd2 = (direccion & 255); // no entiendo porqué
  return int2bcd(op(bcd2int(bcd1), bcd2int(bcd2)));
}

int bcd2int(int bcd) {
  d1 = (bcd & 240) >> 4; // porqué el and con 240 ?
  d2 = bcd & 15; // porqué con 15 ?
  return (d1 * 10) + d2;
}
void cargarROM64K() {
  for(int i=0; i<256*256; i++)
     mem[i] = cargar(i);
}



Salu2
Título: cargando memoria ROM en C++
Publicado por: burb en 08 de Diciembre de 2006, 01:14:56 PM
Para extraer los bytes y los nibbles por separado, ponlos en hexadecimal y lo verás mejor.

No soy profesor, pero le doy un 4,5 al que ha escrito eso por poner esas constantes en decimal.
Título: cargando memoria ROM en C++
Publicado por: ZüNdFoLGe en 08 de Diciembre de 2006, 02:46:36 PM
dicho y hecho...no se me había ocurrido cambiar de base (mal yo). En binario se ve mas claro. Estaban en decimal porque las variables eran int...otra cosa para bajar puntaje...

Salu2
Título: cargando memoria ROM en C++
Publicado por: fiero en 08 de Diciembre de 2006, 03:31:15 PM
Cita de: "ZüNdFoLGe"Estaban en decimal porque las variables eran int...otra cosa para bajar puntaje...

hey! Que tambien se pueden escribir números negativos en hexadecimal, eso no tiene nada que ver. Alguna gente piensa que para trabajar en hexadecimal hay que definir las variables como DWORD, y no es así (me refiero a gente que empieza en esto).

un saludo