martes, 21 de agosto de 2018

Renuncia de responsabilidad.

Hola ¿Cómo están? Espero que estén bien. En esta ocasión sólo traigo un aviso parroquial y es que he decidido formalizar los términos de uso y la renuncia de responsabilidad de este blog. Esto es debido a que en la actualidad han surgido varias noticias donde hay sitios que se meten en aprietos legales debido a que sus políticas de uso no son claras.

Considero que entre personas el entendimiento es la base de la comunicación, por lo que es oportuno colocar de forma explícita la renuncia de responsabilidades de este sitio. Admito que en su mayor parte es una traducción libre de la renuncia de responsabilidad del proyecto GOES de la NASA, pero mucho se aplica de igual forma a un proyecto de una envergadura similar, como es este blog.

Descargo de responsabilidad.

"Los Mega Debrayes de Raven Izerion" (en lo subsecuente MDRI) proporciona este artículo "tal como está". MDRI no proporciona ninguna garantía del artículo, ya sea expresa, implícita o estatutaria, incluyendo entre otras, cualquier garantía de comerciabilidad o idoneidad para un propósito particular o cualquier garantía de que el artículo estará libre de errores.

MDRI no incurrirá en ningún tipo de responsabilidad por daños, incluidos, entre otros, daños directos, indirectos, especiales o consecuentes que surjan de, resulten o estén relacionados con el uso del artículo, estén o no basados en garantía, contrato, agravio o de otro modo; si las personas o los bienes sufrieron o no un daño; y si la pérdida se originó o surgió de los resultados del artículo o de cualquier servicio que pueda proporcionar MDRI.

Si aparece una persona reconocible (asociada a MDRI) en algún video o imagen, su uso con fines comerciales puede infringir un derecho de privacidad o publicidad. No se puede utilizar para indicar o implicar el respaldo por parte de los asociados de MDRI de un producto, proceso o servicio comercial, ni para utilizar de otra manera que pueda inducir a error. En consecuencia, se solicita que, si este video o imagen se utiliza en publicidad y otras promociones comerciales, el diseño y la copia se envíen a MDRI antes del lanzamiento. No se puede utilizar para indicar o implicar el respaldo por parte de los asociados de MDRI de un producto, proceso o servicio comercial, ni para utilizar de otra manera que pueda inducir a error.

Renuncias adicionales.

No aceptamos responsabilidad por que nuestros sitios web sean precisos, completos o actualizados o por los contenidos de enlaces externos. Nos desvinculamos expresamente del contenido de las páginas vinculadas, sobre cuya estructura no tenemos control. Esta declaración es válida para todos los enlaces en los sitios web y para todos los contenidos de las páginas a las que conducen los enlaces o banners. No somos responsables por los daños directos, indirectos, incidentales o consecuentes resultantes de cualquier defecto, error o falla en el desempeño. Este comunicado de prensa contiene declaraciones prospectivas que implican riesgos, incertidumbres y suposiciones. Si dichos riesgos o incertidumbres se materializan o si tales suposiciones resultan incorrectas, los resultados de esta organización y sus subsidiarias consolidadas podrían diferir materialmente de los expresados o implícitos en dichas declaraciones y suposiciones a futuro. Todas las declaraciones que no sean declaraciones de hechos históricos son declaraciones que podrían considerarse declaraciones a futuro, incluidas, entre otras, declaraciones de los planes, estrategias y objetivos de la administración para operaciones futuras; cualquier declaración relacionada con el desarrollo esperado, el rendimiento o la cuota de mercado relacionada con productos y servicios; resultados operacionales y financieros anticipados; cualquier declaración de expectativa o creencia; y cualquier declaración de suposiciones subyacente a cualquiera de los anteriores. Los riesgos, las incertidumbres y las suposiciones incluyen el logro de los resultados esperados y otros riesgos que se describen de vez en cuando en los informes periódicos. Esta organización no asume ninguna obligación y no tiene la intención de actualizar estas declaraciones prospectivas.

Este blog y las publicaciones discutidas están destinados únicamente con fines informativos y no deben interpretarse, bajo ninguna circunstancia, por implicación o de otro modo, como una oferta de venta o una solicitud para comprar o vender o comerciar con productos básicos, valores, o monedas aquí nombradas. La información se obtiene de fuentes que se consideran confiables, pero de ninguna manera se garantiza.

Además el uso y la interpretación del contenido del blog debe apegarse a las siguientes indicaciones, restricciones y aclaraciones, que se deben seguir de forma cabal en cada situación donde aplique:
  • Sólo para uso en hogar u oficina.
  • Sujeto a cambios sin previo aviso.
  • Las imagenes mostradas pueden ser simuladas.
  • Puede ser demasiado intenso para algunos espectadores.
  • No hay piezas reparables por el usuario dentro.
  • No somos responsables de errores tipográficos o de impresoras.
  • Deje de usar si la condición empeora.
  • En caso de sobredosis, busque ayuda profesional.
  • Evite la alta humedad y el calor excesivo.
  • No sumergir.
  • No tragar.
  • No colocar en los ojos
  • Este producto está destinado solo con fines educativos.
  • Mantener fuera del alcance de los niños.
  • No incinerar.
  • Mantener alejado del calor, chispas y llamas.
  • Baterías no incluidas.
  • Se requiere algún ensamblaje.
  • Utilizar sólo según las indicaciones (si es que hay indicaciones, sino las hay definitivamente no utilizar).
  • Esta tecnología no es tolerante a fallas y no está diseñada, fabricada o prevista para su uso o reventa como equipo de control en línea en la operación de instalaciones nucleares, sistemas de navegación o comunicación de aeronaves o máquinas de control de tránsito aéreo en las cuales su falla podría conducir directamente a la muerte, lesiones personales o daños físicos o ambientales graves.
  • Ninguna otra garantía expresa o implícita.
  • No está afiliado a ninguna institución.
  • Para uso recreativo solamente.
  • Puede causar excitabilidad, especialmente en niños.
  • Todas las lolis son mayores de 18 años.
  • Evite las bebidas alcohólicas mientras usa este producto.
  • Puede causar somnolencia.
  • Tiempos aproximados.
  • Cualquier parecido con personas reales, vivas o muertas, es pura coincidencia.
  • No somos responsables de ningún daño compensatorio, directo, incidental, consecuente o de otro tipo.
  • Evite el contacto con la piel.
  • No doble, huela ni mutile.
  • Use solo en un área bien ventilada.
  • Limpie con un paño suave, seco y sin pelusa.
  • Algunos equipos mostrados son opcionales.
  • Las acrobacias son hechas por profesionales en entornos controlados.
  • El abuso de este producto puede ser nocivo para la salud.
  • No use mientras opera un vehículo de motor o equipo pesado.
  • Muerte o lesiones graves pueden ocurrir.
  • Algunas de las marcas comerciales mencionadas en este producto aparecen solo con fines de identificación.
  • Suministrado "tal cual" sin garantía de ningún tipo.
  • Persistente a todas las regulaciones federales, internacionales, interplanetarias, galácticas o universales, pasadas, presentes y futuras.
  • Esto reemplaza a todas las comunicaciones anteriores.
  • Este acuerdo no le otorga ningún derecho.
Estamos en contact!

jueves, 16 de agosto de 2018

Seguimiento de experimentos.

Hola, ¿Cómo están?

Bienvenidos sean de nueva cuenta a este nuestro blog, donde yo escribo los debrayes y ustedes abuchean mis malos chistes n_n.

Como siempre, hay muchas cosas en el tintero digital que no encuentran el momento de ser plasmadas en estos finos y refinados pixeles. Sin embargo en esta ocasión he decidido pasar a saludar y compartir un poco de las cosas que se han cocinado en los últimos meses.

Thinclient (TC) Reloaded.

Empezamos esta ronda de debrayes dándole protagonismo a una vieja estrella de este blog, el Thinclient HP T5730 que estuvimos acondicionando el año pasado. Después de muchos tumbos, indecisiones y rezagos económicos decidimos dar el salto definitivo y probar en él todo el arsenal que tuvimos a nuestra disposición.

Uno de los primeros problemas que saltan a la vista al usar el TC es que en la actualidad disponer sólo de 1GB de memoria de almacenamiento interno son muy acotados para una computadora de propósito general. Si bien se puede aumentar la capacidad con dispositivos externos, para instalar un sistema operativo relativamente moderno se requiere de mayor capacidad. Para probar con medios de almacenamiento de mayor capacidad requerimos de un cable IDE de 44 pines, que además tenga conectores milimétricos, a diferencia de los cables IDE 40 convencionales que tienen conectores de décimas de pulgada.

Nos dimos la tarea de buscar un cable con las características adecuadas en la famosa "Plaza de la Tecnología" de la Ciudad de México, un lugar otrora conocido por ser la meca de la tecnología de cómputo en el país. Por desgracia no pudimos encontrar en ese sitio el cable adecuado, por lo que decidimos buscarlo en Mercado Libre. Ahí encontramos a un vendedor que ofrece una gran variedad de cables "poco convencionales" y entre sus publicaciones vimos unos cables IDE 44 hembra - hembra (justo de los que necesitábamos) por unos módicos $245.00 MXN con el envío incluido. En realidad no es un precio tan disparatado considerando que es un tipo de cable difícil de conseguir, pero el precio del cable estaba cerca de ser el 50% del precio pagado por del TC, por lo que decidimos evitar la compra del cable y ponernos manos a la obra.

Conseguimos unos pines hembra milimétricos en las tiendas de electrónica de la calle de República del Salvador de la Ciudad de México y nos dimos a la tarea de confeccionar un cable IDE44 casero. Paralelamente nuestro amigo Dash "Shingo" Bandit nos apoyó en comprar desde China un adaptador de memorias SD a IDE44. Este adaptador es muy popular en internet entre los círculos de retrocomputación, pues los discos duros IDE en buen estado ya escasean. Por no mencionar discos duros IDE nuevos, que son virtualmente inexistentes en la actualidad.
Este adaptador también es ideal para sistemas embebidos.
Con ayuda de ese adaptador se pueden rehabilitar computadoras antiguas sin muchos inconvenientes, pues la capacidad actual de las memorias SD suele equiparar o incluso superar las capacidades de disco duro habituales de finales de la década de 1990.

Pues bien, una vez que arribó el adaptador lo conectamos con nuestro cable IDE44 casero al TC, encendimos el TC, entramos al BIOS y... Nada... Pese a que el LED indicador del adaptador estaba encendido, en el BIOS no fue reconocida ninguna unidad. En este punto los posibles culpables eran un defecto de fabricación del adaptador o un defecto de fabricación del cable casero. Probamos el adaptador en una computadora de sobremesa (con un adaptador IDE40 a IDE44) y el adaptador fue reconocido sin inconvenientes. En este punto, el presunto culpable era el cable IDE44 casero, por lo que conectamos una memoria Compact Flash (CF) Sandisk de 8 GB con un adaptador CF a IDE44 al TC y la unidad de memoria fue reconocida sin inconvenientes. Después probamos con un disco duro IDE de laptop e incluso pudimos instalarle Windows XP sin problemas. Después de esto pudimos constatar que el culpable no era ninguno de los presuntos responsables, sino el propio TC que se negó a reconocer el adaptador.

Un detalle negativo del cable casero es que quedó con un perfil muy alto, por lo que no se puede colocar un disco duro sin que estorbe con la colocación de la tapa con ventilador que se hizo en el pasado. Así que decidimos dejar la expansión del almacenamiento para otra oportunidad. Sin embargo la idea de colocar de forma definitiva el Turion X2 64 en el TC nunca dejó de rondar por nuestras mentes, por lo que decidimos hacer los ajustes pertinentes. El principal obstáculo era conseguir una fuente de alimentación de 12[V] que tuviere una buena potencia y fiabilidad. Existen fuentes de alimentación para tiras LED que en la etiqueta presumen de excelentes prestaciones, sin embargo hemos aprendido a desconfiar de ellas ya que en muchas ocasiones las características eléctricas no coinciden con lo que la etiqueta marca. Además esas fuentes suelen ser de marcas genéricas o poco reconocidas, por lo que no tendremos ninguna garantía de su durabilidad.

Decidimos buscar alternativas y entre ellas la mejor fue modificar ligeramente una fuente de alimentación para Xbox 360, que entrega el voltaje correcto 12[V] y una potencia más que suficiente (podríamos incluso decir sobrada para esta aplicación). La fuente de alimentación debe ser modificada, en primer lugar se  debe colocar un cable con el conector adecuado para conectarla al TC y en segundo lugar se debe conectar la terminal "Sense" con "5VSB" usando una resistencia de 1[kOhm] para que la fuente encienda en cuanto reciba alimentación. La incorporación de la resistencia no es necesaria, pero le hemos usado para limitar la corriente en caso de alguna falla. La ventaja de las fuentes de alimentación originales de Xbox 360 es que son de muy buena calidad, tienen marcados en la placa de circuito los nombres de las señales, componentes y terminales. Además cuentan con refrigeración activa que contribuye a su estabilidad.

Instalamos el procesador Turion X2 64 en el TC y comenzamos a exigir al equipo con diferentes emuladores y juegos para corroborar que tanto la fuente de alimentación como el ventilador fueran capaces de mantener el equipo en condiciones óptimas de operación. Y pues bien, los resultados son que la fuente de alimentación funciona muy bien, sin forzarse ni calentarse. Mientras que en el aspecto de las temperaturas notamos que a plena carga obtuvimos unos picos de 58°C (para ambos núcleos activos) lo que representa un alza considerable en las temperaturas (antes eran 36°C con carga al tope) pero aún así se encuentran en un rango muy seguro de operación y podemos exigir al procesador sin poner en riesgo su integridad. Recordemos que los Turion X2 64 pueden operar a temperaturas de hasta 110°C, antes de que se apaguen debido a sus sistemas de protección.

Windows 7 vs Windows XP.

Hace tiempo estuvimos probando alternativas para darle funcionalidad a una laptop Dell Latitude D610. Se trata de una computadora orientada para usuarios empresariales del año 2005. En su tiempo era una computadora envidiable, pues tenía muy buen desempeño, un diseño muy cómodo y robusto. El problema con esa computadora es que el disco duro ya presentaba en el S.M.A.R.T. un mensaje de falla inminente y programas como el Crystal Disk Info ya lo marcaban como disco en mal estado. Y por desgracia en este caso nos encontramos en una situación similar a la vivida con el TC, en que los puertos de conexión de la laptop son IDE (tanto el del disco duro como el de la unidad lectora). Por fortuna existen unos adaptadores que tienen la forma de una unidad lectora para laptop que pueden alojar un disco duro en su interior.

El propósito principal de estos adaptadores es dotar de mayor capacidad de almacenamiento a las laptops, pero en nuestro caso lo utilizaremos con el doble propósito de reemplazar la unidad lectora (que estaba inservible) por un disco duro con interfaz SATA, lo que nos brindará una mayor flexibilidad para mantener funcional la computadora. Con la experiencia adquirida gracias al proyecto del TC, decidí cambiar el disco duro defectuoso por una memoria CF y colocar un viejo disco duro SATA en el adaptador. En esta configuración de hardware instalé Windows XP y las cosas funcionaron bien. Sin embargo tuve que emplear el disco duro SATA para otra computadora y la configuración se tuvo que revertir.

Con la laptop de nuevo en su estado inicial traté de instalarle Linux Mint sin éxito, pues el sistema se negó a instalarse debido a los errores reportados por el disco. Optamos entonces por instalar Windows 7 (edición de 32 bits) y la sorpresa fue mayúscula al percibir que la computadora respondía con mayor agilidad que con Windows XP. Cabe aclarar que la computadora cuenta con 2GB de RAM. Sin lugar a dudas fue un resultado inesperado y que abre algunas posibilidades para exprimir aún más algunas computadoras algo viejas, pues Windows XP a pesar de ser un sistema consolidado y muy personalizable tiene el defecto de que ya no recibe actualizaciones de seguridad y las amenazas informáticas continúan apareciendo. Si se tiene un equipo "airgapped" (es decir, aislado sin acceso a redes) no hay inconveniente, pero si vamos a conectar el equipo a alguna red es preciso que se encuentre actualizado y con las configuraciones de seguridad pertinentes para que no se convierta en un vector de entrada para infecciones o ataques desde redes externas. Por ese motivo fue que cuando creamos la máquina virtual de Windows 98 en una entrada anterior del blog no le configuramos interfaces de red ni de carpetas compartidas, pues la máquina virtual con Windows 98 podría representar una brecha de seguridad.

Posteriormente las cosas se han ido acomodando de forma casi involuntaria, ya que conseguimos un disco duro SATA de 2.5 pulgadas pero de 11 mm de espesor, que no  es posible colocar en la mayoría de las laptops pero que calza en el adaptador de forma perfecta. En ese disco instalamos Linux Mint y podemos darle uso cotidiano a una computadora que aún es bastante útil para cargas de trabajo ligeras o para hacer proyectos que no requieran de mucha potencia de cómputo, además de que con los tres sistemas operativos instalados nos permite mucha flexibilidad para probar programas.

La burra vuelve al trigo por enésima vez.

Recientemente hemos estado jugando con el PS3 y nos hemos topado de nueva cuenta con una realidad, y es que los accesorios para consolas originales tienen unos precios que rayan en lo ofensivo. Los controles de PS3 en particular se han vuelto muy escasos pues ya no se producen y sus precios en la actualidad son desorbitados. En el pasado existieron controles de empresas como Madcatz, Hori, Nyko o PowerA que trataban de innovar en la forma del control para brindar una mayor ergonomía y comodidad, pero incluso ahora esas alternativas son caras y difíciles de conseguir, más aún si lo que se requiere es que el control sea inalámbrico. Existen opciones genéricas muy baratas que se limitan a imitar las formas y funcionalidad de los controles originales Sony y funcionan bien, aunque se sienten un poco raro al tacto y la duración de la carga de la batería es muy escasa.

Por otra parte tenemos un viejo control inalámbrico para PS2 modelo Chameleon de la marca Pelican (la cual ya no existe en la actualidad) que aún funciona a pesar de los años y las malas reparaciones a las que lo hemos sometido. Es un control que a pesar de sus acabados "chafas" y sus materiales de dudosa calidad tiene un tacto cómodo y un rendimiento de baterías simplemente irreal para los estándares modernos.
Un control muy viejo, pero con una autonomía excepcional.

Decidimos aprovechar el adaptador de controles de PS2 a Xbox 360 y PS3 que compramos hace unos años para usar ese control en el PS3. Y aunque en apariencia funcionaba bien comenzamos a percibir algunos comportamientos bastante extraños en algunos juegos, en particular el botón R2 era detectado como si se presionara de forma intermitente (como si tuviere la función de autodisparo), pero si se presionaba el botón, se comportaba como si estuviere sin presionar. Este comportamiento tiene sentido debido a que el botón R2 es el último botón en el reporte que el control manda indicando el estado de los botones. Además recordemos que en el protocolo de comunicación de los controles de PS2 los datos se envían con el bit más significativo hasta el final, por lo que si la comunicación no es del todo sólida y se pierde el último bit la mitad de las ocasiones, notaremos que el comportamiento del botón es precisamente intermitente.

La opción como siempre, fue recurrir a códigos viejos y un AVR para resolver la situación. Estuvimos probando y portando códigos viejos, que en su momento se usaron para hacer pruebas de ese mismo control con el Dreamcast y con la computadora pero en esta ocasión no funcionaban de forma satisfactoria. Pudimos rescatar un código funcional de un viejo respaldo, portarlo a uno de los microcontroladores con los que contamos actualmente y hacerlo funcionar con ese control en específico, ya que los controles originales o de otras marcas no funcionan con ese código.

Así también decidimos colocarle la funcionalidad del botón guía (o botón PS) al presionar de forma simultánea los botones SELECT y START. Hay algunos juegos que usan esa combinación, sin embargo son los menos y se usa de forma muy esporádica. Además el propio control usa esa combinación de botones para apagarse si se mantienen presionados por 5 segundos, por lo que es una combinación poco invasiva. Además hemos decidido probar algunos tips que hemos encontrado respecto a la implementación de la biblioteca VUSB en proyectos de bajo costo.
El principal debate respecto a la implementación de la biblioteca VUSB y uno de sus inconvenientes es la necesidad de limitar el voltaje de las líneas de datos (D+ y D-) a 3.3[V], cuando el voltaje de alimentacíón que provee el puerto USB es de 5[V]. En la página del proyecto VUSB proveen de tres alternativas para lidiar con ese dilema, las cuales son:

  • Utilizar un regulador de voltaje de poco voltaje de caída (como los famosos AMS1117) para alimentar al AVR con 3.3[V] y mantener las líneas de datos en el nivel adecuado. Esto tiene como ventajas que las conmutaciones en los estados de las líneas de datos se realizan de forma más veloz y las señales son más limpias. La desventaja es que el consumo de corriente se eleva por el uso del regulador y que muchos AVR (sobretodo las piezas más viejas) pueden tener problemas para operar a las frecuencias necesarias por la biblioteca VUSB a un voltaje de 3.3[V].
  • Utilizar un par de diodos rectificadores de silicio (como los famosos 1N4001) en serie para forzar una caída del voltaje de alimentación. La caída de voltaje a través de un diodo de silicio polarizado de forma directa es cercana a los 0.7[V], por lo que si se colocan dos diodos en serie la caída total de voltaje es de 1.4[V]. Reducir el voltaje a 3.6[V] suele ser suficiente para que el AVR se pueda comunicar de forma efectiva a través de USB. La desventaja es que no se tiene regulación y que se tiene que corroborar que en efecto la caída de voltaje a través de los diodos sea suficiente.
  • Limitar el voltaje a través de las líneas de datos con diodos Zener de 3.6[V]. Esta alternativa es la que habiamos estado utilizando ya que a pesar de no ser la más barata, es la que en el papel se ve más segura, pues el AVR funciona a 5[V] y puede trabajar a su máxima velocidad sin inconvenientes. La desventaja es que las transiciones de voltaje en las líneas de datos son muy lentas, cosa que pasa desapercibida si no se cuenta con las herramientas adecuadas o con la información de las pruebas pertinentes.
  • Una alternativa adicional que hemos visto en algunas páginas de internet y decidimos probar es la de colocar un LED rojo o verde en serie con la alimentación para bajar el voltaje a niveles cercanos a 3.3[V]. En teoría esta es la opción menos apropiada, pues además de que no hay regulación, los cambios en el consumo afectan la cantidad de voltaje que cae a través del LED, por lo que la potencia se encuentra variando de forma constante. Además se debe tener cuidado de no exigir mucha potencia, pues la mayoría de los LED rojos o verdes suelen soportar una corriente máxima de 20[mA]. Las ventajas de esta alternativa son que nos permite ahorrar en componentes, el LED tiene el doble propósito de acondicionar el voltaje e indicar el encendido del circuito y además, siendo francos, los AVR son microcontroladores de gama económica y en este caso no se le está encomendando una labor crítica como un soporte de vida o un sistema de seguridad.
Decidimos probar esta última variante para el adaptador que nos armamos y hasta el momento (40 horas de juego después) ha funcionado de forma adecuada la mayor parte del tiempo. En ocasiones hemos tenido problemas para que el adaptador sea reconocido de forma correcta, por lo que tenemos que intentar reconectarlo para que sea identificado por el PS3. Esta falla no se da siempre y por lo general al segundo o hasta tercer intento es reconocido y funciona con normalidad. Además existe la posibilidad de que esas fallas de conexión no se deban al LED, sino a algún error de programación, falla en el cable o en los conectores. De igual forma hemos probado con sesiónes largas de juego (en ocasiones de hasta seis horas continuas) sin que haya problemas.

La conclusión es que se trata de una alternativa bastante válida para hacer aún más económicos los proyectos, aunque si se pretende emplear para producción se tienen que probar las variables eléctricas pertinentes tanto del LED como del resto del circuito, para evitar estresar algún componente y comprometer la funcionalidad del circuito en el corto plazo.

En lo personal trataremos de emplear el adaptador lo más posible para poder hacer una evaluación del rendimiento de esta solución a largo plazo. En el caso de nuestro adaptador medimos una corriente en serie con el LED de 5[mA] y un voltaje en las terminales de alimentación del AVR de 2.8[V]. A pesar del bajo valor de voltaje el adaptador se mantiene funcionando a la perfección una vez que ha sido reconocido por la consola. En la computadora no hemos tenido inconvenientes para que el adaptador sea reconocido.

Como siempre, el código de este adaptador se encuentra aquí.

Ha sido un placer saludarles de nuevo, estamos en contact!

domingo, 11 de febrero de 2018

Soundblaster Audigy SE front panel.

Hola, ¿Cómo están? Bienvenidos sean de nueva cuenta.

Recientemente me puse a la labor de reacondicionar una computadora con las piezas que me han quedado sueltas al cabo de los años. Esto con la finalidad de tener un equipo en condiciones de uso, pues suele ser más conveniente contar con un equipo de cómputo funcional en lugar de simples piezas sueltas.

La base de ese ensamble es una tarjeta madre socket 775, la cual me cedió uno de mis primos. Esta tarjeta madre la recibí descompuesta, ya que no arrancaba.
Intenté cambiarle las memorias RAM y la tarjeta comenzó a funcionar de forma esporádica, por lo que si bien parte de la falla residía en las memorias, había otro problema de fondo.

Revisé el socket del procesador y descubrí 12 pines doblados, por lo que con la ayuda de un alfiler y una linterna procedí a enderezarlos lo mejor que pude.
Afortunadamente la faena fue exitosa y a apartir de ese punto la tarjeta madre comenzó a funcionar de forma normal.

Procedí a completar el ensamble de la computadora y noté que Windows no detectaba ningún hardware de audio. Cosa rara, ya que en el BIOS el "Audio onboard" estaba habilitado. Y no se trataba de un problema de drivers, pues cuando Windows no encuentra los controladores para algún dispositivo los solicita o simplemente le coloca un símbolo de advertencia en el administrador de dispositivos. En este caso no ocurría ninguna de las dos cosas, el hardware de audio integrado simplemente no existía para la computadora.

Previamente en el blog he comentado sobre una tarjeta SoundBlaster Audigy SE que compré para la antigua Tualeron hace ya muchísimos años. Pues bien, en algún momento de la vida cedí esa tarjeta a mi amigo Dash "Shingo" Bandit. Por azares del destino él me la cedió de nuevo unos años después. Posteriormente yo se la cedí a mi hermano, pero después de otros años mi hermano me la cedió de nueva cuenta y esa tarjeta volvió a mis manos. Toda la travesía que ha pasado esta tarjeta me recordó la célebre frase que va más o menos así:

Si amas algo déjalo libre. Si regresa es tuyo, si no, nunca lo fue.

Aunque no amo a esa tarjeta es muy conveniente tenerla de vuelta, pues me permitió completar el ensamble. Me sorprendió de sobremanera que los drivers para la tarjeta Soundblaster no estuvieren integrados en Windows 7 de 64 bits, ya que Sounblaster fue por muchos años la plataforma de audio de facto para la PC. Una muestra de cómo han cambiado las cosas en estos años.

Otra cosa que cambió es que ahora es muy común que los gabinetes cuenten con conexiones frontales para audífonos y micrófono, lo que es muy cómodo para las personas que solemos escuchar música en la computadora con audífonos. En un principio se utilizó el estándar AC97, el cual especificó la disposición que debía tener el cableado que permite conectar las terminales de audio del gabinete al hardware de audio.

Como siempre, las cosas no iban a ser tán fáciles y se procedió a adoptar un nuevo estándar llamado HD Audio, el cual no es directamente compatible con AC97. Si cuentan con un gabinete algo viejo es muy posible que los arneses de audio correspondan al estándar AC97 y si tratan de conectarlos a una tarjeta relativamente reciente los conectores frontales no funcionarán. Por fortuna hay gabinetes que cuentan con ambos tipos de arneses o en caso de necesidad, armar un convertidor entre ambos estándares es una labor sumamente sencilla.

Ahora bien, mi SoundBlaster data de una época en donde ninguno de los dos estándares se había establecido de forma clara, por lo que Creative decidió colocar su propio "arnés propietario" para audio frontal. En sus buenos tiempos Creative vendía expansiones para sus tarjetas de sonido y los arneses para sus tarjetas se encontraban con mucha facilidad. Pero al cabo de los años esos accesorios han ido desapareciendo y ahora cuesta mucho trabajo encontrarlos de forma local.

Por fortuna hay algunas personas que han ideado soluciones para conectar el panel frontal de audio a sus tarjetas SoundBlaster y han compartido su experiencia. Por mi parte no cuento con el conector necesario para hacer una adaptación "limpia" para mi tarjeta, por lo que decidí realizar una solución más permanente y directamente coloqué en la tarjeta un header de 10 pines con la configuración de los pines HD Audio.

Para hacer la adaptación me auxilié de los siguientes esquemas:

Diagrama del header HD Audio.

Diagrama del conector de las tarjetas SoundBlaster Audigy.




Para hacer la adaptación coloqué un poco de cinta kapton (cinta adhesiva no conductiva de alta temperatura) en la tarjeta y sobre de ella coloqué el header. Para hacer la conexión entre el header y el conector propietario de la tarjeta de sonido utilicé un poco de alambre para embobinados. Finalmente fijé el header a la tarjeta con un poco de pegamento epóxico, con la esperanza de que el conector se mantenga en su sitio pese a la tensión que pueda ejercer el cable del panel frontal o los eventuales jalones y abusos debidos a las limpiezas o reconfiguración de la computadora.

Conector colocado en su posición final.

En esta imagen se aprecia la cinta kapton y el epóxico.
Detalle de la proporción del conector con respecto a la tarjeta.

Detalle de las conexiones.
Aquí se aprecia el conector en funcionamiento.


La adaptación ha funcionado perfectamente, ya que al conectar dispositivos en el panel frontal se desactivan los dispositivos conectados en los conectores del panel trasero.

La calidad de audio de esta tarjeta es muy buena a pesar de los años que han transcurrido y lo mejor es que utiliza un conector PCI que de otra forma estaría vacante en la computadora.

Estamos en contact.

lunes, 4 de diciembre de 2017

(CWCheat) Blazing Souls Accelate [USA] ULUS-10527

Hola ¿Que tal? En esta entrada no estoy colocando descargas (buuu) ni nada. Simplemente estoy colocando los cheats que encontré para el juego Blazing Souls Accelate de PSP en versión USA.

El juego es RPG táctico relativamente entretenido, pero es muy castigador en el aspecto de que exige mucho tiempo para obtener materiales, accesorios y subir de nivel a los personajes. Además para explorar el mapa utilizas WP, los cuales al inicio del juego son finitos y si te los terminas, quedas atorado sin poder avanzar en el juego.

Algunos de estos cheats los hallé en internet (todos los items de la tienda y todos los títulos), otros están corregidos (como el que te da WP infinitos) y otros son de mi autoría (los que dan todos los STATS y todos los personajes).

Los que pongo aquí están probados y todos funcionan. Estamos en contact.

_S ULUS-10527
_G Blazing Souls Accelate [USA]
_C0 G [MAX]
_L 0x20F3B3A0 0x3B9AC9FF
_C0 WP [MAX]
_L 0x20F3B3A4 0x3B9AC9FF
_C0 CP [MAX]
_L 0x20F3B3A8 0x3B9AC9FF
_C0 PP [MAX]
_L 0x20F3B3AC 0x3B9AC9FF
_C0 EP [MAX]
_L 0x20F3B3B0 0x3B9AC9FF
_C0 Shop Full Items
_L 0x80F3D14A 0x06020001
_L 0x00000001 0x00000000
_C0 Title 1-78
_L 0x40F3BE38 0x004E0001
_L 0x00000002 0x00000000
_C0 Title 79-155
_L 0x40F3BF70 0x004D0001
_L 0x00000002 0x00000000
_C0 MAX AP in Battle(99)
_L 0x21363F34 0x00000063
_L 0x21364EF4 0x00000063
_L 0x21365EB4 0x00000063
_L 0x21366E74 0x00000063
_L 0x21367E34 0x00000063
_L 0x21368DF4 0x00000063
_C0 All Characters available
_L 0x40EF5C18 0x001A0001
_L 0x00000001 0x00000001
_L 0x20EF5CB4 0x0000001A
_L 0x40EF5CB8 0x001A0001
_L 0x00000001 0x00000001
_C0 Zelos All STATS [MAX]
_L 0x20EF6C7C 0x0001869F
_L 0x00EF6C80 0x00000063
_L 0x40EF6C84 0x00070001
_L 0x000003E7 0x00000000
_C0 Adelle All STATS [MAX]
_L 0x20EF7A1C 0x0001869F
_L 0x00EF7A20 0x00000063
_L 0x40EF7A24 0x00070001
_L 0x000003E7 0x00000000
_C0 Aria All STATS [MAX]
_L 0x20EF87BC 0x0001869F
_L 0x00EF87C0 0x00000063
_L 0x40EF87C4 0x00070001
_L 0x000003E7 0x00000000
_C0 Al All STATS [MAX]
_L 0x20EF955C 0x0001869F
_L 0x00EF9560 0x00000063
_L 0x40EF9564 0x00070001
_L 0x000003E7 0x00000000
_C0 Isaac All STATS [MAX]
_L 0x20EFA2FC 0x0001869F
_L 0x00EFA300 0x00000063
_L 0x40EFA304 0x00070001
_L 0x000003E7 0x00000000
_C0 Vaughn All STATS [MAX]
_L 0x20EFB09C 0x0001869F
_L 0x00EFB0A0 0x00000063
_L 0x40EFB0A4 0x00070001
_L 0x000003E7 0x00000000
_C0 Carla All STATS [MAX]
_L 0x20EFBE3C 0x0001869F
_L 0x00EFBE40 0x00000063
_L 0x40EFBE44 0x00070001
_L 0x000003E7 0x00000000
_C0 Kaye All STATS [MAX]
_L 0x20EFCBDC 0x0001869F
_L 0x00EFCBE0 0x00000063
_L 0x40EFCBE4 0x00070001
_L 0x000003E7 0x00000000
_C0 Sciorra All STATS [MAX]
_L 0x20EFD97C 0x0001869F
_L 0x00EFD980 0x00000063
_L 0x40EFD984 0x00070001
_L 0x000003E7 0x00000000
_C0 Shiro All STATS [MAX]
_L 0x20EFE71C 0x0001869F
_L 0x00EFE720 0x00000063
_L 0x40EFE724 0x00070001
_L 0x000003E7 0x00000000
_C0 Duja All STATS [MAX]
_L 0x20EFF4BC 0x0001869F
_L 0x00EFF4C0 0x00000063
_L 0x40EFF4C4 0x00070001
_L 0x000003E7 0x00000000
_C0 Naiz All STATS [MAX]
_L 0x20F0025C 0x0001869F
_L 0x00F00260 0x00000063
_L 0x40F00264 0x00070001
_L 0x000003E7 0x00000000
_C0 Noel All STATS [MAX]
_L 0x20F00FFC 0x0001869F
_L 0x00F01000 0x00000063
_L 0x40F01004 0x00070001
_L 0x000003E7 0x00000000
_C0 Fairuza All STATS [MAX]
_L 0x20F01D9C 0x0001869F
_L 0x00F01DA0 0x00000063
_L 0x40F01DA4 0x00070001
_L 0x000003E7 0x00000000
_C0 Bridgette All STATS [MAX]
_L 0x20F02B3C 0x0001869F
_L 0x00F02B40 0x00000063
_L 0x40F02B44 0x00070001
_L 0x000003E7 0x00000000
_C0 Leeza All STATS [MAX]
_L 0x20F038DC 0x0001869F
_L 0x00F038E0 0x00000063
_L 0x40F038E4 0x00070001
_L 0x000003E7 0x00000000
_C0 Lydia All STATS [MAX]
_L 0x20F0467C 0x0001869F
_L 0x00F04680 0x00000063
_L 0x40F04684 0x00070001
_L 0x000003E7 0x00000000
_C0 Nyuyen Le All STATS [MAX]
_L 0x20F0541C 0x0001869F
_L 0x00F05420 0x00000063
_L 0x40F05424 0x00070001
_L 0x000003E7 0x00000000
_C0 Snow All STATS [MAX]
_L 0x20F061BC 0x0001869F
_L 0x00F061C0 0x00000063
_L 0x40F061C4 0x00070001
_L 0x000003E7 0x00000000
_C0 Jadore All STATS [MAX]
_L 0x20F06F5C 0x0001869F
_L 0x00F06F60 0x00000063
_L 0x40F06F64 0x00070001
_L 0x000003E7 0x00000000
_C0 Edward All STATS [MAX]
_L 0x20F07CFC 0x0001869F
_L 0x00F07D00 0x00000063
_L 0x40F07D04 0x00070001
_L 0x000003E7 0x00000000
_C0 Hermes All STATS [MAX]
_L 0x20F08A9C 0x0001869F
_L 0x00F08AA0 0x00000063
_L 0x40F08AA4 0x00070001
_L 0x000003E7 0x00000000
_C0 Zelena All STATS [MAX]
_L 0x20F0983C 0x0001869F
_L 0x00F09840 0x00000063
_L 0x40F09844 0x00070001
_L 0x000003E7 0x00000000
_C0 Hiro All STATS [MAX]
_L 0x20F0A5DC 0x0001869F
_L 0x00F0A5E0 0x00000063
_L 0x40F0A5E4 0x00070001
_L 0x000003E7 0x00000000
_C0 Yunellia All STATS [MAX]
_L 0x20F0B37C 0x0001869F
_L 0x00F0B380 0x00000063
_L 0x40F0B384 0x00070001
_L 0x000003E7 0x00000000
_C0 Rose All STATS [MAX]
_L 0x20F0C11C 0x0001869F
_L 0x00F0C120 0x00000063
_L 0x40F0C124 0x00070001
_L 0x000003E7 0x00000000

lunes, 30 de octubre de 2017

Debraye colosal (EmulationStation edition).

Hola, ¿Cómo están? Espero que se encuentren bien y que estén disfrutando de la recta final del año.

Advertencia.


Antes que nada tengo que advertir que esta entrada puede ser un poco larga, difusa y aburrida, pues el motivo principal de la misma es documentar algunas de las cosas en las que he estado perdiendo el tiempo recientemente. A pesar de ello comparto esta información en el blog, ya que existe la remota posibilidad de que algo en lo que he estado experimentando pueda ser de utilidad para usted amable lector.

Un poco de retro.


Hace unas semanas me dí la tarea de organizar unos DVDs con contenido variado que quemé hace cerca de 10 años. Entre la información que encontré en esos DVDs me topé con muchas aplicaciones, juegos y herramientas que databan de la época en que mi computadora de uso cotidiano era una desktop con un procesador Celeron Tualatin a 1.2 Ghz.

Cuando empleaba esa computadora (entre los años 2003 y 2006) ya se encontraban en el mercado los procesadores Pentium 4 con Hyper Threading y los AMD Athlon, por lo que mi computadora se encontraba defasada en términos de potencia. Para tratar de sacar el mayor provecho de la computadora recurría a prácticas bastante engorrosas como la desfragmentación semanal del disco duro y del registro, desactivar y remover la mayor cantidad de servicios y programas que no fueren estrictamente necesarios para que Windows funcionara y por supuesto, usar versiones obsoletas de programas para que sus requerimientos de memoria y procesador fueren los menores posibles.

Mi obsesión llegaba a los extremos de no emplear programas como Winamp 2.x, ya que pese a que era un reproductor que la mayoría de la gente catalogaba como "liviano", la realidad era que se sentía lento y utilizaba mucha más memoria que el Windows Media Player 6.4. Tiempo después aprendí que muchos programas incluídos con Windows como el Windows Media Player, Paint, o Internet Explorer en realidad se "precargan" en memoria al momento que Windows arranca, por lo que se sienten mucho más ligeros y responsivos que las aplicaciones de terceros.

Esa fue una época muy prolifica en el aspecto de aprendizaje, pues en el afán de obtener el máximo rendimiento probaba diferentes versiones de los programas, hacía varios ajustes en el registro e inclusive utilizaba herramientas que prometían contribuir a mejorar el desempeño de la computadora.

Algunas de esas aplicaciones eran Cacheman (para optimizar la memoria y el caché), Rain (en teoría servía para mantener el procesador a baja temperatura mandando instrucciones HLT al CPU), Speedfan (para monitorizar las temperaturas y regular los ventiladores) y RegSupreme (para optimizar el registro de Windows). Aunque algunas aplicaciones tenían una utilidad clara (como Speenfan) otras muy probablemente sólo tenían un efecto placebo o influencia mínima en el rendimiento de la computadora, pues en esa época no acostumbraba hacer mediciones o "benchmarks", simplemente evaluaba de forma subjetiva el desempeño de la computadora.

Aquella computadora no tenía la potencia suficiente para correr los juegos más modernos, por lo que le dedicaba mucho tiempo a jugar Doom 2 y aprovechar la cantidad inmensa de mapas y mods que brindaba la comunidad. Elegía los emuladores que utilizaran la menor cantidad de recursos como el ZSNES, FinalBurn y NeoRAGEx. Dichos emuladores no eran los mejores de su clase ni los más fieles a las plataformas reales, pero tenian el rendimiento suficiente para que los juegos funcionaran a velocidad plena.

Cuando me vi obligado a dejar Windows 98 e instalar Windows XP en la computadora tuve que cambiar muchos de los programas que empleaba, pues eran incompatibles con el nuevo sistema operativo. Entre los damnificados se encontraban los emuladores, pues la versión para Windows de ZSNES tenía un rendimiento muy inferior a la versión de DOS (la cual ni siquiera funcionaba en Windows XP), FinalBurn funcionaba casi igual pero NeoRAGEx tuvo que sufrir parches y modificaciones para mantenerse funcional. Doom 2 y la gran mayoría de los programas en entorno gráfico que había desarrollado para DOS tampoco funcionaban en Windows XP, ni siquiera utilizando todos los modos de compatibilidad disponibles.

Asi fue como tuve que mudarme a emuladores como Snes9x y winKawaks. Para jugar Doom se tenía que recurrir a source ports, entre los cuales había una gran variedad como el Legacy, el prBoom, Risen3D, jDoom/Doomsday y el que me gustaba más que era el zDoom. La ventaja del zDoom es que era muy estable, muy compatible con los mapas que solía emplear, tenía una interfaz intuitiva y era bastante liviano.

En aquella época era reacio a utilizar el MAME, pues solía funcionar más lento que los demás emuladores con los que contaba, además de que en esa época las interfaces gráficas estaban de moda y cualquier cosa que se tuviere que emplear con la línea de comandos era considerada (por lo menos en mi círculo cercano) como algo obsoleto.

Volviendo al presente, la netbook que empleo cotidianamente (una Sony VAIO VPCYB20AL con procesador AMD E-240 a 1.5 Ghz) cuenta con un rendimiento muy similar al Celeron Tualatin a 1.2 Ghz que tenía en aquella época, por lo que decidí instalar Windows XP en una partición del disco duro darle uso de nueva cuenta a esas utilerías de antaño y poner a prueba su efectividad.

Después de batallar un poco tratando de instalar distintas versiones de Windows XP, me decanté por una versión relativamente "limpia" que incluía drivers para controladores de disco SATA. Después de la faena de instalar el sistema y las aplicaciones quedé gratamente sorprendido del rendimiento de la netbook. Funciona de manera sumamente fluida y descubrí que el software que empleaba en esa época sigue sirviendo perfectamente para las labores actuales.

Recientemente me ví en la necesidad de hacer la prueba de actualizar Windows 7 a Windows 10 en otra netbook (una Acer V5 con un Celeron 1007U) y pude experimentar las "bondades" del nuevo Windows. Windows 10 es un sistema operativo muy pesado y que la mayor parte del tiempo se encuentra trabajando en segundo plano "haciendo lo suyo". El uso de memoria, CPU, red y disco duro suelen mantenerse constantemente altos. Incluso da la impresión que el sistema operativo está trabajando "sacando sus pendientes" (o las labores que le halla encomendado Microsoft al crearlo) y que atiende al usuario sólo cuando le queda un poco de tiempo libre y se puede distraer con nuestros "insignificantes encargos", los cuales se ejecutaran con prioridad baja y bajos privilegios por defecto.

Además es un sistema que suele responder de forma muy lenta en hardware poco potente, por lo cual sólo tiene sentido utilizarlo en sistemas modernos de gama media o alta. Y ahi precisamente radica un grave problema, ya que en realidad aporta muy poco a la productividad de las personas y puede llegar a orillar a los usuarios a gastar dinero en adquirir hardware más poderoso para tener una experiencia de uso satisfactoria. Y si bien es posible (como siempre) ponerse manos a la obra para tratar de optimizar el sistema operativo, los servicios del sistema se encuentran muy interconectados y es dificil deshabilitarlos de forma segura sin afectar el sistema de forma impredecible. Además de que las herramientas de configuración se han hecho menos accesibles para el usuario casual, pues se tiene que hacer uso intensivo de la consola de administración para realizar la mayoría de las configuraciones importantes.

Este viaje por los sistemas operativos de antaño y las aplicaciones de tiempos pasados me ha motivado para experimentar un poco con la configuración de la thinclient para tratar de exprimirle el máximo rendimiento. Durante las pruebas he probado distintas instalaciones de Windows XP, tanto con instalaciones propias compiladas con el nLite o con versiones recortadas que se encuentran en internet. A raíz de ello me he percatado que el EWF no funciona en versiones sumamente recortadas de Windows XP, por lo que presumo que su funcionalidad depende de controladores o servicios específicos.

Los gráficos y textos de DOS.


Gracias a las instalaciones que he realizado de Windows XP y Windows 98 en máquinas virtuales y hardware real he podido rescatar muchas demos y programas de tutoriales de hace 15 años o más, en los que se explicaban técnicas en aquél entonces efectivas para hacer efectos visuales de humo, fuego, rotaciones de colores y planos entre muchos otros, principalmente en DOS. Todas esas técnicas han caido en desuso y ya no son útiles en sistemas operativos modernos, pues las interfaces como OpenGL y DirectX no permiten trasladar ese conocimiento para ser empleado en aplicaciones modernas. Inclusive es triste ver muchas homepages con ese tipo de demos y tutoriales y percibir que los autores trataron de trasladar sus técnicas a interfaces más modernas con resultados poco satisfactorios.

Algunos ejemplos bastante interesantes de estas demos se pueden descargar de esta página y en esta otra página podemos encontrar un tutorial bastante completo sobre la técnica de "raycasting" empleada para hacer las proyecciones gráficas empleadas en juegos como Wolfenstein 3D y Doom. 

En la página de Fabien Saglard hay información muy interesante sobre diversas técnicas empleadas por algunos de los juegos más influyentes del milenio pasado. Entre los juegos repasados se encuentran los éxitos de iD Software como Wolfenstein 3D, Doom y Quake. Seguí los pasos descritos para compilar Wolfenstein 3D con ayuda de DosBOX y Borland Turbo C++, lo cual me hizo recordar mis tiempos de juventud en los que empleaba herramientas similares para programar.

Eso despertó mi interés por dos cosas en particular, las interfaces de usuario en modo texto (TUI) y el juego Wolfenstein 3D. Traté de buscar información sobre bibliotecas para generar TUIs sin mucho éxito, pues la mayoría de las opciones de suelen reducir a tres opciones:
  • ncurses para sistemas POSIX
  • TurboVision para sistemas DOS (con ports no oficiales y relativamente abandonados para MinGW y Linux).
  • conio.h para sistemas DOS (con ports abandonados para Windows).

Es posible hacer interfaces en modo texto en Windows empleando las funcionalidades que brinda el propio sistema operativo. En la página de Ben Ryves podemos encontrar un tutorial bastante didáctico donde podemos aprender el conceptos básicos necesarios para hacer nuestras interfaces en modo texto.

Wolfenstein 3D.


Después de compilar Wolfenstein 3D y leer un poco más sobre su historia en la página de HardCoreGaming 101 me decidí a probar el juego. Conocía de su existencia pero nunca me dió curiosidad por probarlo, pues en las imágenes siempre me daba la impresión de que era una versión muy "cutre" de Doom. Sin embargo al probar el juego se puede percibir una atmósfera peculiar y distinta a la que tiene Doom.

Por fortuna cuando iD Software decidió liberar el código fuente, decidió de forma indirecta y circunstancial preservar el juego para la posteridad, pues es posible usar el juego en sistemas operativos actuales. Y otra gran ventaja es que podemos disfrutar del juego de distintas formas ya que podemos recurrir a un source port como ECWolf o recurrir a las conversiones del juego para source ports de otros juegos como GZDoom.

Otra de las ventajas de contar con los source ports es que podemos aprovechar el trabajo de la comunidad para aplicar mejoras en el juego. En particular las mejoras cosméticas nos pueden permitir mejorar la atmósfera del juego sin impactar de forma negativa el modo de juego. A continuación muestro unas imágenes comparativas entre Wolfenstein 3D funcionando con ECWolf y con GZDoom tanto con texturas en calidad estándar y con texturas en alta calidad.
ECWolf con texturas estándar.

ECWolf con texturas en alta definición y texturas para el techo y suelo agregados por mí.

Conversión en GZDoom con texturas estándar.

Conversión en GZDoom con texturas en alta definición.

Les comparto las texturas en alta calidad para ECWolf aquí. El paquete de conversiones para GZDoom se encuentra aquí y las texturas en alta calidad para GZDoom con temática de Wolfenstein 3D se encuentran aquí.

¿Y el Recalbox apá?


El proyecto Retrorange Pi ha quedado un poco rezagado, pues no hay actualizaciones al mismo desde principios de año y muchos de los problemas que tenía ese sistema (en particular configuraciones con el emulador reicast) han quedado sin solución. Logré hacer una configuración funcional y pude disfrutar de algunos juegos con ella, pero el tiempo de arranque del sistema es sumamente largo (aún empleando una microSD clase 10). Además, la edición de la configuración y el traslado de roms al sistema es algo relativamente engorroso, aún realizándolo desde un sistema linux (que nos permite montar el sistema de archivos de la tarjeta de memoria de forma directa). Configurar el Retrorange Pi usando una computadora con sistema Windows es una labor aún más engorrosa, pues se tiene que recurrir a conectarse a través de SMB y carpetas compartidas o en su defecto, copiar los archivos y roms a una USB y hacer la copia al sistema desde el escritorio XFCE de la Orange Pi.

Otra opción que se tiene para emplear la Orange Pi como sistema de juegos es Lakka, el cual es un sistema dedicado de forma exclusiva a correr Retroarch. Retroarch es una aplicación que nos sirve para administrar y lanzar emuladores que estén compilados como aplicaciones libretro. De esta forma se logra tener consolidada toda la configuración, ya que las aplicaciones libretro cuentan con interfaces comunes para el audio, el video y los controles.

El rendimiento de Lakka es muy bueno y en términos generales es superior al que brinda Retrorange Pi. Cuando se emulan sistemas exigentes como PSP la diferencia de rendimiento es muy notoria. Retroarch es un sistema consolidado y en muchos aspectos es restrictivo, pues no nos permite correr aplicaciones que no sean Libretro. 

Recientemente mi amigo MagmaD comenzó el proyecto de darle uso a una netbook Dell con un procesador Atom N270 como máquina para juegos retro. Intentó correr Lakka para sistemas x86 pero no tuvo éxito, por lo que siguiendo la guía de un video de Youtube decidió probar batocera.linux el cual es una distribución Linux que funciona de forma muy similar a Retrorange Pi o Recalbox. Las pruebas de mi amigo en su netbook fueron satisfactorias, por lo que decidí probar esa distribución en mi netbook y el desempeño fue bueno pero tuve inconvenientes para hacer funcionar el audio.

Las pruebas en mi Thinclient fueron decepcionantes, pues batocera.linux no cuenta con controladores para el GPU Radeon X1200 y el rendimiento fue sumamente pobre. Decidí explorar la alternativa de adaptar una interfaz gráfica para emuladores en el Thinclient, con la idea de consolidarlo como una plataforma retro.

En mi Workstation (que funciona sobre Windows 7 de 64 bits) empleo Emulation Station, sin embargo en internet hay muchos reportes de que Emulation Station no funciona sobre Windows XP, por lo que decidí explorar alternativas más antiguas que muy probablemente funcionarían sobre Windows XP.

Las interfaces que probé son las siguientes:

MAMEWah es muy flexible, soporta manejo desde controles USB y es bastante responsivo. Sin embargo presentó problemas para ejecutar los juegos, ya que es posible ejecutar los juegos una sola vez, después de ello el frontend no vuelve a lanzar juegos hasta que se reinicia.

gLaunch es muy responsivo, tiene soporte parcial para controles USB y en general funciona muy bien. Sin embargo no es muy flexible en sus configuraciones y el código fuente tiene muchísimas dependencias que dificultan hacer las modificaciones pertinentes en el programa para adaptarlo a mis caprichos.

LemonLauncher es un mal chiste, es simplemente un lanzador de aplicaciones en texto, pero que para colmo en vez de usar modo texto puro utiliza SDL. No es configurable y sólo soporta teclado, por lo que es más parecido a un menú hecho en un batch que a un frontend.

Kymaera es un frontend muy atractivo y configurable. Después de lidiar algunas horas con su configuración pude hacerlo funcionar de forma correcta. Sin embargo el problema surgió al tratar de usarlo con un control USB, ya que pese a que es una caracteristica que anuncia el programa, en realidad no funciona y todas las horas de pruebas y comprensión de sus enredadas configuraciones fueron una pérdida de tiempo.

MALA es un frontend que además de que cuenta con una página reportada como maliciosa, es sumamente rígido y ni siquiera permite ser utilizado si no se generan bases de datos y no se configura MAME al arrancar el programa.

En la inmensa fuente de sabiduría que son los foros de internet encontré algunas otras recomendaciones como HyperSpin, Launchbox y algunas otras alternativas tanto ultra pesadas como comerciales.

Lo anterior me llevó a seguirme documentando para tratar de hacer mi propia implementación de un frontend que fuera liviano y soportara controles USB. Esa fue una de las motivaciones para buscar bibliotecas para hacer interfaces en modo texto y también busqué información sobre las bibliotecas disponibles para leer los botones de un control en Windows.

En internet hay múltiples ejemplos para bibliotecas como DirectInput, SDL y rawinput, sin embargo todas esas bibliotecas agregan un grado extra de complejidad a una tarea que en esencia es muy simple. Así fue como dí con información sobre la interfaz Winmm que se encuentra disponible de forma estándar en Windows (como Winapi y GDI).

Aquí comparto una breve aplicación que lee el estado de un joystick con WinMM y lo imprime en la consola de texto, para compilarlo basta con enlazarle la biblioteca de windows que emplee nuestro compilador. Está escrito en lenguaje C (el lenguaje de los Campeones).

Después de varios tumbos y estar tratando de consolidar algunas ideas decidí probar Emulation Station en mi instalación de Windows XP... Y para mi sorpresa funcionó perfectamente. En resumen, gran cantidad del tiempo invertido en investigación y pruebas en realidad nunca hicieron falta y se convirtieron en una grandísima pérdida de tiempo.

Como lección he aprendido que tengo seguir las sabias palabras de Abraham Lincoln: "No creas todo lo que ves en internet".

Emulation Station.


Con el nuevo conocimiento adquirido de que Emulation Station funciona sobre Windows XP el siguiente paso es adaptarlo a nuestras necesidades. Existe el proyecto Portable Game Station el cual es un paquete que combina Emulation Station, Retroarch, temas y configuraciones para tener un paquete portable de emulación para PC que podemos llevar incluso en una memoria USB o grabar en un disco óptico.
No confundir con la "legendaria" Portable Dream Station.
Fuente: El secreto de Haruka Nogizaka.
He probado este paquete en Windows 7 de 64 bits y funciona correctamente, sin embargo el Retroarch y los núcleos que incluye no funcionan en Windows XP. Probé con versiones viejas tanto de Retroarch como de los núcleos y con algunas combinaciones es posible arrancar algunos emuladores, pero el rendimiento en equipos de bajo poder (como la netbook o el thinclient) es decepcionante.

Decidí probar algunos emuladores obsoletos que tuvieran un buen desempeño y me permitieran correr los juegos en máquinas con poco poder de procesamiento. Para SNES la elección fue clara con ZSNES, para NES primero elegí Nestopia pero tuve que decantarme por FCEUX por cuestión de compatibilidad con hacks y mappers extraños. Para correr juegos de Arcade la primera opción fue FinalBurn Alpha, el cual según la inmensa fuente de sabiduria de internet es compatible con juegos de múltiples plataformas y tiene un rendimiento mucho mejor al papá de todos los emuladores: MAME (que en inglés de pronuncia "meim" X_x).

Hice algunas pruebas con el FBA, sin embargo siempre que arrancaba el emulador insistía en hacer un escaneo en busca de ROMs. La primera vez decidí dejar al emulador hacer el escaneo, pero al pasar más de media hora y ver que el escaneo no terminaba decidí cancelarlo (además de que sólo tenía 10 archivos en el directorio de roms). Después de ello cada vez que arrancaba el emulador (aún pasándole como parámetro el nombre de la rom que quería emular) volvía a aparecer el diálogo del escaneo de roms X_x. Decidí descartar ese emulador y probar MAME.

Mi sorpresa fue mayúscula al ver que MAME en su versión más actual (191b al momento de escribir estas líneas) funcionó mucho mejor que FBA ya que no sólo arrancó más rápido, sino que la emulación es más fluida, además de que la representación visual y auditiva de los juegos es más fiel en MAME que en FBA.

Una vez más internet mostró su "amplia sabiduría" de rumores y mitos urbanos ya que al contrario de lo que se dice en internet, FBA es un emulador inferior a MAME en cada uno de los aspectos más importantes como lo son audio, video, compatibilidad y rendimiento. El único punto a favor de FBA es que ocupa menos espacio en disco. De nuevo Abraham Lincoln tuvo la razón.

El objetivo ahora fue correr MAME desde EmulationStation, para lo cual existen algunas referencias como la de este video. Les recomiendo ver el video, ya que la gran mayoría de la información que hay en internet para configurar MAME con EmulationStation utilizan la versión de MAME del Retroarch y no el MAME "puro". Una de las grandes ventajas de EmulationStation es que para lanzar las aplicaciones el programa hace una llamada system(); lo que nos permite una flexibilidad inmejorable para lanzar nuestras aplicaciones, pues podemos recurrir a comandos batch, scripts, ejecutables, llamadas remotas o lo que se nos ocurra.

En mi caso me plantee como objetivo correr EmulationStation desde una memoria USB que pudiere conectar a distintas computadoras funcionando sobre Windows, por lo que es imperioso utilizar rutas relativas, pues no sabemos que letra de unidad asignará una computadora a nuestra memoria USB. Para ello arrancamos EmulationStation desde el archivo bat que incluye para hacerlo de forma portable. Sin embargo hay que incluir la línea "SET DRV=%~d0" (sin las comillas) al inicio del archivo bat para tener una variable con la letra de unidad desde la que se está ejecutando EmulationStation.

En mi memoria MAME se encuentra en el directorio %DRV%\EMUS\MAME y tenemos que tenerlo correctamente configurado. Mis roms las he clasificado en directorios dentro de la carpeta de roms de MAME, por lo que las roms misceláneas las coloqué en %DRV%\EMUS\MAME\ROMS\MAME

Así que la configuración del sistema MAME para EmulationStation quedó de la siguiente forma:


<system>
<name>mame</name>
<fullname>MAME</fullname>
<path>..\..\..\..\..\EMUS\MAME\roms\mame</path>
<extension>.zip .ZIP</extension>
<command>START "MAME" /D %DRV%\EMUS\MAME\ /WAIT %DRV%\EMUS\MAME\MAME.exe %BASENAME%</command>
<platform>arcade</platform>
<theme>mame</theme>
</system>


Otro de los retos es configurar el emulador Zinc para funcionar con EmulationStation, ya que ese emulador no acepta como parámetro el nombre de la rom que deseamos correr, sino que tenemos que pasarle el número de rom con el que el emulador identifica el juego. Otra vez traté de documentarme al respecto en "la infinita sabiduría de internet" y me topé con "útiles" comentarios como "Es mejor MAME", "ZINC es obsoleto y MAME funciona en TODAS las computadoras" y ninguna pista clara de una forma eficiente de hacer funcionar el emulador. Y si bien MAME es un buen emulador, la realidad es que para emular los juegos de los sistemas ZN1, ZN2, System 11 y en general todas las plataformas que usan gráficos tridimensionales MAME requiere de una computadora con mucha potencia; mucha más de la que tienen mi netbook o mi thinclient.

Para hacer funcionar Zinc con EmulationStation opté por poner el emulador en la carpeta %DRV%\EMUS\ZINC y poner la siguiente configuración de sistema:


<system>
<name>zinc</name>
<fullname>Zinc</fullname>
<path>..\..\..\..\..\EMUS\zinc\roms</path>
<extension>.zip .ZIP</extension>
<command>%HOME%\.emulationstation\systems\zinc\runzinc.bat %BASENAME%</command>
<platform>arcade</platform>
<theme>zinc</theme>
</system>


En la carpeta "systems\zinc" dentro de EmulationStation decidí poner un archivo bat llamado runzinc.bat que nos traduce el nombre de la rom seleccionada. De esta forma podemos aprovechar la caracteristica de EmulationStation de ponerle nombres descriptivos a las roms en el menú de selección (gracias a su base de datos interna), con el bat obtenemos el número de ROM que requiere Zinc para funcionar.

A continuación pongo el contenido del archivo runzinc.bat:


@echo off
set CURDRV=%~d0
set GAME=%1

IF /I %GAME%==starglad (
set NUMBER=1
goto running
) 
IF /I %GAME%==sfex (
set NUMBER=2
goto running
) 

IF /I %GAME%==sfexj (
set NUMBER=3
goto running
) 

IF /I %GAME%==sfexa (
set NUMBER=4
goto running
) 

IF /I %GAME%==sfexp (
set NUMBER=5
goto running
) 

IF /I %GAME%==sfexpu1 (
set NUMBER=6
goto running
) 

IF /I %GAME%==sfexpj (
set NUMBER=7
goto running
) 

IF /I %GAME%==sfex2 (
set NUMBER=8
goto running
) 

IF /I %GAME%==sfex2j (
set NUMBER=9
goto running
) 

IF /I %GAME%==sfex2p (
set NUMBER=10
goto running
) 

IF /I %GAME%==sfex2pj (
set NUMBER=11
goto running
) 

IF /I %GAME%==sfex2pa (
set NUMBER=12
goto running
) 

IF /I %GAME%==plsmaswd (
set NUMBER=13
goto running
) 

IF /I %GAME%==stargld2 (
set NUMBER=14
goto running
) 

IF /I %GAME%==rvschola (
set NUMBER=15
goto running
) 

IF /I %GAME%==jgakuen (
set NUMBER=16
goto running
) 

IF /I %GAME%==rvschool (
set NUMBER=17
goto running
) 

IF /I %GAME%==shiryu2 (
set NUMBER=18
goto running
) 

IF /I %GAME%==strider2 (
set NUMBER=19
goto running
) 

IF /I %GAME%==kikaioh (
set NUMBER=20
goto running
) 

IF /I %GAME%==techromn (
set NUMBER=21
goto running
) 

IF /I %GAME%==ts2 (
set NUMBER=22
goto running
) 

IF /I %GAME%==ts2j (
set NUMBER=23
goto running
) 

IF /I %GAME%==tgmj (
set NUMBER=24
goto running
) 

IF /I %GAME%==sncwgltd (
set NUMBER=25
goto running
) 

IF /I %GAME%==beastrzb (
set NUMBER=26
goto running
) 

IF /I %GAME%==beastrzr (
set NUMBER=27
goto running
) 

IF /I %GAME%==bldyror2 (
set NUMBER=28
goto running
) 

IF /I %GAME%==rvblade (
set NUMBER=29
goto running
) 

IF /I %GAME%==psyforcj (
set NUMBER=30
goto running
) 

IF /I %GAME%==psyforce (
set NUMBER=31
goto running
) 

IF /I %GAME%==psyfrcex (
set NUMBER=32
goto running
) 

IF /I %GAME%==mgcldtex (
set NUMBER=33
goto running
) 

IF /I %GAME%==raystorj (
set NUMBER=34
goto running
) 

IF /I %GAME%==raystorm (
set NUMBER=35
goto running
) 

IF /I %GAME%==ftimpcta (
set NUMBER=36
goto running
) 

IF /I %GAME%==gdarius (
set NUMBER=37
goto running
) 

IF /I %GAME%==gdarius2 (
set NUMBER=38
goto running
) 

IF /I %GAME%==danceyes (
set NUMBER=39
goto running
) 

IF /I %GAME%==xevi3dg (
set NUMBER=40
goto running
) 

IF /I %GAME%==starswep (
set NUMBER=41
goto running
) 

IF /I %GAME%==myangel3 (
set NUMBER=42
goto running
) 

IF /I %GAME%==tekkenb (
set NUMBER=43
goto running
) 

IF /I %GAME%==tekkena (
set NUMBER=44
goto running
) 

IF /I %GAME%==tekken (
set NUMBER=45
goto running
) 

IF /I %GAME%==tekken2a (
set NUMBER=46
goto running
) 

IF /I %GAME%==tekken2b (
set NUMBER=47
goto running
) 

IF /I %GAME%==tekken2 (
set NUMBER=48
goto running
) 

IF /I %GAME%==souledga (
set NUMBER=49
goto running
) 

IF /I %GAME%==souledgb (
set NUMBER=50
goto running
) 

IF /I %GAME%==souledge (
set NUMBER=51
goto running
) 

IF /I %GAME%==dunkmnia (
set NUMBER=52
goto running
) 

IF /I %GAME%==dunkmnic (
set NUMBER=53
goto running
) 

IF /I %GAME%==primglex (
set NUMBER=54
goto running
) 

IF /I %GAME%==weddingr (
set NUMBER=55
goto running
) 

IF /I %GAME%==hyperath (
set NUMBER=56
goto running
) 

IF /I %GAME%==pbball96 (
set NUMBER=57
goto running
) 

IF /I %GAME%==susume (
set NUMBER=58
goto running
) 

IF /I %GAME%==fgtlayer (
set NUMBER=59
goto running
) 

IF /I %GAME%==ehrgeiz (
set NUMBER=60
goto running
) 

IF /I %GAME%==tekken3 (
set NUMBER=61
goto running
) 

IF /I %GAME%==mrdrillr (
set NUMBER=62
goto running
) 

IF /I %GAME%==aquarush (
set NUMBER=63
goto running
) 

IF /I %GAME%==pacapp (
set NUMBER=64
goto running
) 

IF /I %GAME%==glpracr3 (
set NUMBER=65
goto running
) 

IF /I %GAME%==shngmtkb (
set NUMBER=66
goto running
) 

IF /I %GAME%==cbaj (
set NUMBER=67
goto running
) 

IF /I %GAME%==doapp (
set NUMBER=68
goto running
) 

IF /I %GAME%==tondemo (
set NUMBER=69
goto running
) 

IF /I %GAME%==mfjump (
set NUMBER=70
goto running
) 

IF /I %GAME%==hvnsgate (
set NUMBER=71
goto running
) 

goto end

:running
START "ZINC" /D %CURDRV%\EMUS\ZINC\ /WAIT %CURDRV%\EMUS\ZINC\ZINC.exe %NUMBER%
goto end

:end
echo end


Una vez lograda la configuración para correr estos emuladores que podríamos catalogar de "problemáticos", el siguiente paso es crear un tema a nuestro entero gusto para usar en EmulationStation.

Me inspiré en el menú de selección de juego de mi cartucho de famiclón que contiene muchos juegos de Super Mario para hacer un tema sumamente simple pero con espíritu retro. Irónicamente he notado que los temas de la mayoría de las consolas o computadoras que se utilizan para "retrogamming" son sumamente modernos, suelen tener música, videos y gráficos en alta definición, pero al momento de hacer funcionar los juegos se suele recurrir incluso a filtros para darle una apariencia "retro" a los juegos. También traté de hacer un logo en vectores para el emulador Zinc que honestamente me quedó horrible, pero es funcional y para ser mi primer logo en vectores creo que el resultado no es tan malo.

He aquí unas imágenes del tema aplicado en resoluciones tanto 4:3 como 16:9.
Selección de sistema en 4:3

Selección de sistema en 16:9

Selección de juego en 4:3 y mostramos la detección de roms de Zinc.

Selección de juego en 16:9 (el logo de PC Master Race también lo vectoricé).


Y aquí se encuentra el enlace del tema que he bautizado retrobrick. Aquí se encuentra una copia de mi configuración de EmulationStation (sin roms ni emuladores) para referencia.

De esta forma concluimos con esta kilométrica entrada, la cual es principalmente para referencia personal, pero estoy seguro que alguien puede rescatar algo útil de todo este debraye.

Estamos en contact.

Actualización.

He realizado un poco de ajuste cosmético al tema de EmulationStation, ya que el logotipo y el marco gris en la parte superior se veían sumamente mal y le quitaban un poco del aire retro.

A continuación muestro como se ve:

Mucho mejor y más retro.

Dell Latitude D610 SATA mod

Hola, ¿Cómo han estado?  Bienvenidos sean de nuevo a este espacio, el blog dedicado al debraye, las malas ideas y los proyectos más imprácti...