Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





cargando memoria ROM en C++

Iniciado por ZüNdFoLGe, 08 de Diciembre de 2006, 11:58:50 AM

« anterior - próximo »

ZüNdFoLGe

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

burb

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.

ZüNdFoLGe

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

fiero

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
www.videopanoramas.com Videopanoramas 3D player






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.