sábado, 28 de enero de 2012

Montando un cartucho del QBIQS

Hace tiempo que tenía este vídeo, pero se me olvidó subirlo por aquí...

¿Como se fabrican los sueños?

sábado, 21 de enero de 2012

KNT participa en #msxdev

El anuncio oficial ha tenido lugar hoy mismo en la feria de Nijmegen: KNT va a participar en el nuevo concurso #msxdev.


Eso significa que, según las reglas del concurso, la ROM no se podrá liberar hasta que el concurso termine, aunque posiblemente se pueda jugar en alguna RetroMadrid o RU antes de final de año... ¡y quién sabe si algo más! :D

No dejéis de visitar el sitio web del concurso (pinchando en el banner) para estar al tanto de los proyectos que se presenten.

viernes, 13 de enero de 2012

Sigamos con la detección de FM en MSX

El verano pasado hablé sobre la detección de diferentes tarjetas de sonido FM en el MSX. Si bien todo lo allí indicado era correcto, merece la pena volver sobre el tema para corregir algunos puntos.

FM-PAC y MSX-Audio Bios

La MSX-Audio Bios es, como su propio nombre indica, una Bios para Music-Module, Moonsound y OPL3, que se encarga de simular la presencia de un FM-Pac y redirigir por software el uso del FM-Pac al correspondiente cartucho.

Si utilizamos cualquiera de estos cartuchos con esta Bios, estaremos detectando un FM-Pac cuando en realidad no es así, de forma que hay que volver a la rutina de detección para mejorarla un poco.

Echándole un vistazo a la entrada anterior, primero buscábamos un FM interno con la cadena "APRLOPLL" en $4018 y si no lo encontrábamos, buscábamos simplemente la presencia de la cadena "OPLL" en la dirección $401C. Esto es lo que puede traernos problemas, ya que la MSX-Audio Bios también presenta esta cadena en dicha dirección, pero es posible detectar que se trata de otra tarjeta en lugar de un FM-Pac, pues la cadena identificativa será:
  • AUD1OPLL para un Music-Module
  • AUD3OPLL para un cartucho OPL3
  • AUD4OPLL para una Moonsound
Por lo tanto, si en un slot detectamos la cadena OPLL pero se trata de una de estas tres cadenas identificativas, significa que hemos encontrado una MSX-Audio Bios y, por lo tanto, no un FM-Pac, con lo que habrá que seguir buscando.

OPL1 secundario

Al parecer es posible situar un segundo chip OPL1 en los puertos $C2 y $C3, de forma que tengamos dos chips OPL1 y podamos usarlos al mismo tiempo. Así que una buena idea a la hora de buscar los chips FM disponibles es comprobar si este segundo OPL1 está presente leyendo el puerto $C2 y comprobando si el resultado es 6. En mi caso, lo busco únicamente si el primero no está presente.

El emulador Open MSX permite simular este segundo OPL1, por si lo queréis probar.

Cartucho OPL3: Moonsound de pobres

Este cartucho realizado en Brasil también se llama "Moonsound de pobres" y está basado en un chip OPL3, que contiene la parte FM de una Moonsound. Es decir, se trata de una Moonsound que no tiene Wave Table. Pero a nosotros nos interesa sólo la parte FM, así que habrá que tenerlo en cuenta.

Detectar este cartucho es muy sencillo, ya que se hace igual que la Moonsound, sólo que buscando un 0 en el puerto $C0. Al igual que con el OPL1 secundario, yo lo que hago es buscar el OPL4 en $C4 y si no lo encuentro, entonces miro en $C0 y lo trato como si fuera un OPL4, pero con diferente puerto.

Si queréis probar este chip, hoy por hoy, el único emulador que permite utilizar este cartucho es el Open MSX.


martes, 10 de enero de 2012

Programando para COLECOVISION (II)

Hace unas semanas, comentaba por aquí los puntos básicos a la hora de programar para la consola ColecoVision, una consola muy muy similar a nuestros MSX1.

En aquel post hablé de la cabecera de las roms para ColecoVision y de la disposición de la memoria, así como lo mínimo que hay que saber sobre la forma en la que la CPU de la consola (un Z80 a la misma velocidad de reloj que el MSX) gestiona las interrupciones generadas por el VDP (que es el mismo que el de un MSX1).

En esta ocasión vamos a ver cómo leer los mandos de la ColecoVision. Pero primero vamos a ver cómo son estos mandos.


Típico mando de ColecoVision
(imagen original de museodelvideojuego.com)

Como podemos ver, el mando consiste en una rueda/joystick situada en la parte superior, con dos botones grises (uno a cada lado del mando, en la zona media) y un teclado numérico de 12 botones.

Para obtener el estado completo de cada mando hay que leer dos bytes, aunque con uno puede bastar, dependiendo de qué necesitemos leer. Lo primero que hay que tener en cuenta es que los valores que vamos a leer utilizan lógica inversa, es decir: un 1 significa NO pulsado. Así que tras leer, una buena idea es utilizar la instrucción CPL y asumir que un 1 significa pulsado.

Lectura del primer byte: Joystick, rueda y botón izquierdo

Este primer byte nos informa sobre el estado del joystick, de la rueda y del botón izquierdo. Para poder leer este byte tenemos que hacer un OUT al puerto $C0, ¿con qué valor? Pues lo divertido es que da exactamente igual, sólo tenemos que hacer un OUT a ese puerto para seleccionar el primer byte devuelto por los mandos.

Una vez seleccionado este primer byte, podremos leer el estado del primer mando a través del puerto $FC y el del segundo a través del puerto $FF.

Por último, interpretar el contenido de este byte es muy sencillo, ya que cada bit tiene un significado preciso:
  • Bit 0: Arriba
  • Bit 1: Derecha
  • Bit 2: Abajo
  • Bit 3: Izquierda
  • Bit 4: Rueda girando
  • Bit 5: Dirección de giro
  • Bit 6: Botón Izquierdo
  • Bit 7: -- No usado --
Como veis, es sencillo. Lo más complicado es entender el funcionamiento de la rueda. El bit 4 (en la documentación de la Coleco se le denomina INT) se activa cuando la rueda está girando, en cuyo caso el bit 5 tendrá 0 ó 1 dependiendo del sentido de giro.

Lectura del segundo byte: Botón derecho y teclado numérico

Este segundo byte nos dirá el estado del botón derecho y qué tecla se ha pulsado en el teclado numérico. Para seleccionar que queremos leer este byte, debemos realizar un OUT al puerto $80 y al igual que con el primer byte, nos da igual el valor que mandemos.

Una vez seleccionado el segundo byte, lo mismo que antes: el puerto $FC nos devuelve el valor del primer mando y $FF el del segundo.

Sin embargo, interpretar este segundo byte es algo más complejo, ya que sólo el bit 6 tiene un significado concreto: el estado del botón derecho. Para leer el estado del teclado numérico, hay que utilizar la siguiente tabla cuya entrada es el valor de los 4 bits de menor peso de este segundo byte y la salida representa la tecla pulsada:

ValorTecla pulsada
0-- Inválido --
16
21
33
49
50
6*
7-- Inválido --
82
9#
107
11-- Inválido --
125
134
148
15-- Inválido --

Es una tabla a la que aún no le he encontrado un sentido lógico, pero es la que utiliza la propia BIOS de la Coleco a la hora de decodificar el teclado numérico.

De momento eso es todo. En este punto estamos en condiciones de hacer algo funcional para Colecovision, aunque no suene por ahora. En un futuro post veremos cómo aprovechar lo que ya sabemos del PSG de MSX para utilizarlo en la Colecovision.

domingo, 1 de enero de 2012

Resultados de la encuesta sobre desbloquear el final del QBIQS

Terminó 2011 y con el año terminó el plazo para responder a la encuesta que os planteaba.

Los resultados sobre 16 votos han sido los siguientes:
  • 5 personas consideraron que se debería poder desbloquear el final sólo si se había llegado al último nivel
  • 3 personas consideraron que se debería poder desbloquear el final con independencia del nivel al que se hubiera llegado.
  • 8 personas consideraron que eso de desbloquear el final por otros medios que no fueran el juego puro y duro... es cosa de nenazas.
Por lo tanto, ya que una de cada dos personas lo ha decidido así, no haré el programa para que se pueda liberar el final del juego.

Nuevo año, nuevo concurso

¿Cansado de que sólo se hagan juegos para MSX1? ¿Quieres hacer una demo para MSX2 o un procesador de textos con soporte para GFX9000?

¡Entonces #msxdev compo 2012 es tu concurso!

Un concurso de programación para MSX que no se restringe a los juegos ni al MSX1. Habrá juegos, demos, utilidades, msx-music, scc, moonsound, discos, cintas, roms... ¡todo vale! MSX-DOS, BASIC, C, ASM... ¡Escoge tu lenguaje y tu proyecto y comienza a desarrollar! ¡Tienes toooodo un año!

¡Feliz 2012!