Regresar   Foro de marcianitos.org > Consolas, Recreativas y Ordenadores > Consolas > Retroconsolas

 
 
Old 31-oct-2008, 19:21   #1
NiNTeNDeRo
Editor Marciano
[GB]Creando un Game Boy opensource

Todos recordamos los comienzos de las videoconsolas de bolsillo. Unos eran partidarios de la Sega Game Gear, y otros de la Nintendo Game Boy. La primera tenía mejores gráficos y era en color, pero la querida Game Boy tenía una autonomía envidiable, lo quele hizo ganar el puesto de cabeza en el mercado. Ahora, cuando la tecnología ha avanzado lo suficiente, se ha podido lograr el sueño de muchos aquellos niños de entonces que ahora tienen unos años más, pero siguen pensando desde hace años cómo crear su propio Game Boy.

La materialización del proyecto, como no podía ser de otra manera, ha venido de la mano del opensource, ya que la iniciativa surge gracias al empeño de liquidware, y que se refleja en este interesante artículo (en inglés), donde se explican los pormenores de la creación de un Game Boy opensource. La base de la “criatura” es Arduino, del cual ya hablamos hace unos días, y se han agregado unos módulos de hardware que ya existían previamente, lo que reduce enormemente la dificultad de su creación por todo aquel que quiera su propia versión de la videoconsola portátil. De esta forma, aquí dejamos algunas imágenes del llamado “GamePack” y el “Inputshield”, uno de los elementos más importantes del gadget.

Así pues, puede que ésta sea un buena forma de emplear los conocimientos sobre hardware, no sólo a nivel personal, sino también profesional, ya que podría llegar a comercializarse a nivel industrial este tipo de videoconsolas, con el valor añadido de que son perfectamente configurables e, incluso, la plataforma base se puede reconfigurar para adaptarse a otros conceptos desarrollados a partir de la primera idea.

Desde aquí, queremos hacernos partícipes de la ilusión que seguro que tendrán muchos usuarios y seguidores de la tecnología basada en el espíritu opensource. Por ello, animamos a todos los que quieran construirse una videoconsola con esta filosofía, o mejorarla con nuevas funcionalidades, aquí dejamos el código fuente para Arduino:
#include

#define RXPIN 3
#define TXPIN 2

AFSoftSerial mySerial = AFSoftSerial(RXPIN, TXPIN);

unsigned char x=0;

void setup()
{
mySerial.begin(9600);

/* Sync up by waiting for character */
while(mySerial.read() != ‘U’);
}

void loop()
{
/* The first analog pin sent */
x=0;

/* send 6 Analog Pin values */
while (x <>
{
serial_sendAnalog(x);
x++;
}

delay(10);

x=0;
while(x<>
{
serial_sendDigital(x);
x++;
}

delay(100);

}

void serial_sendDigital(unsigned char digitalPin)
{

if ( (digitalPin <> 13) )
return;

mySerial.print((unsigned char)digitalRead(digitalPin));
delay(2);

}

void serial_sendAnalog(unsigned char analogPin)
{
unsigned char lowByte, highByte;
unsigned int val;

/* Pin number range check */
if (analogPin > 6)
return;

/* Get the value */
val = analogRead(analogPin);

/* Separate the value into 2 bytes */
lowByte = (unsigned char)val;
highByte = (unsigned char)(val >> 8) ;

/* Send the high byte */
mySerial.print(highByte);

/* Write delay */
delay(1);

/* Send the low byte */
mySerial.print(lowByte);

/* Write delay */
delay(1);
}

Y de la misma forma, ofrecemos el código para el Touchshield:

COLOR green = { 0, 255, 0 };
COLOR blue = {0,0,255};
COLOR yellow = {255,255,0};
COLOR black = {0,0,0};
COLOR white = {255,255,255};
COLOR grey = {0×77,0×77,0×77};
COLOR red = {255,0,0};

POINT my_point;

unsigned int analogValues[6];
unsigned char digitalValues[10];

LCD_RECT digitalRect = { 118, 15, 127, 115 };
LCD_RECT analogRect = {0, 60, 32, 121 };

unsigned char x;

void setup()
{

Serial.begin(9600);
delay(3000);

/* The sync character */
Serial.print(’U');
}

unsigned int oldx, oldy, newx, newy;
int erasemode = 2;
int pencolor = 1;

void loop()
{
//digitalValues[0] - digital pin 4, button A MODEA
//digitalValues[1] - digital pin 5, button B MODEA
//digitalValues[4] - digital pin 8, button A MODEB
//digitalValues[5] - digital pin 9, button B MODEB
//analogValues[5] - joystick y, MODEA
//analogValues[4] - joystick x, MODEA
//analogValues[3] - joystick y, MODEB
//analogValues[2] - joystick x, MODEB

//Read analog values

analogValues[0] = (Serial.read() <

<>
analogValues[1] = (Serial.read() <

<>
analogValues[2] = (Serial.read() <

<>
analogValues[3] = (Serial.read() <

<>
analogValues[4] = (Serial.read() <

<>
analogValues[5] = (Serial.read() <

<>

//Read digital values:

//Read digital values
digitalValues[0] = Serial.read();
digitalValues[1] = Serial.read();
digitalValues[2] = Serial.read();
digitalValues[3] = Serial.read();
digitalValues[4] = Serial.read();
digitalValues[5] = Serial.read();
digitalValues[6] = Serial.read();
digitalValues[7] = Serial.read();
digitalValues[8] = Serial.read();
digitalValues[9] = Serial.read();

if (touch_get_cursor(&my_point)) {
lcd_clearScreen( black);
}

newx=3+(1023-analogValues[5])*.12;
newy=3+(1023-analogValues[4])*.12;

if (erasemode && ((oldx != newx) (oldy != newy))) {
lcd_circle(oldx,oldy,5, black, black);
}
if (pencolor == 1) {
lcd_circle(newx,newy,5, blue, blue);
} else if (pencolor == 2) {
lcd_circle(newx,newy,5, green, green);
} else if (pencolor == 3) {
lcd_circle(newx,newy,5, red, red);
} else {
lcd_circle(newx,newy,5, white, white);
}

if (!digitalValues[0]) {
erasemode = !erasemode;
}

if (!digitalValues[1]) {
pencolor++;
if (pencolor == 5) {
pencolor = 1;
}
}

oldx=newx;
oldy=newy;
}

Esperamos que estas líneas sirvan para animar a todos aquellos niños que un día tuvieron un Game Boy entre sus manos y hoy, ya mayores, quisieran volver a ese momento. Ahora eso es posible, gracias al opensource.

Gameboy opensouce


Fuente: territorio libre
   
Old 31-oct-2008, 22:48   #2
Barbe
Usuario registrado
Muy buena la idea, aunque un poco caro.