Y> Creo deberÃa ir diciendo ya de que se trata por 2 motivos:
Y> 1- Ya no se quedará en vaporware SEGURO. Lo terminaré como mucho mucho
Y> en un mes.
Y> 2- Me gustarÃa saber que opináis todos por si no le he dado un buen
Y> enfoque y aún se le podrÃan hacer modificaciones.
Y> Próximo capÃtulo en "Mega-Multiplayer para MSX" ;)
----------------------------------------
Bueno, pues... quisiera presentaros un interface que está casi
terminado, y que ya ha pasado varias fases de prueba
satisfactoriamente.
Estoy seguro que en principio puede sonar un poco rollo, porque se
basa en un interface RS-232C nuevo, pero éste es sólo parte del
proyecto como explicaré un poco ahora.
Érase que se era...
Todo surgió de la idea de hacer un juego multiplayer a gran escala,
para unir tantos MSX como se quisiera en una especie de LAN.
Luego motivar al personal con un par de juegos simplones en principio,
al estilo gauntlet, deportivo o algunos shareware que existÃan en PC para
multiplayer que eran super adictivos.
Estuve haciendo algunas pruebas en todos los conectores del MSX para
averiguar si por alguno de éstos podrÃa tanto enviar como recibir
datos, pero nada.
El Puerto de impresora del MSX parecÃa en idóneo si no fuera porque es
unidireccional y solo podrÃa recibir datos de 1 en 1 bit y encima no
habrÃa forma de sincronizar, asi que me quedé en un convertidor de
paralelo a serie por LPT pero que solo podÃa enviar datos :(
El conector del joystick al parecer es un término medio, se pueden
enviar datos y recibir de 4 en 4 y además sincronizados, peeeero,
siempre hay un pero, habrÃa que sacrificar los puertos de joystick
que sólo se dedicarÃan a la comunicación, pero nada de jugar con
joystick mientras se usa el cacharrito multiplayer. Además, lo mas
chungo de todo es la programación, hay que andar tocando muchos
registros del PSG para pasar a modo entrada a salida, y encima soy
incapaz de direccionar el puerto de joystick B :( parece cosa del
demonio.
Al final me convencà de lo que no querÃa desde un principio, hay que
hacerlo por el SLOT de cartucho a pelo, pufff..
Ahora bien, desde un principio tenÃa pensado que la comunicación serÃa
serie y asÃncrono, para que el cableado de la "red" fuese lo más
sencillo, largo y barato posible.
Además que si está enfocado a juegos multiplayer principalmente, no
harÃa falta demasiada velocidad de transmisión, porque en estos casos
se mandan solo informacion sobre coordenadas de los personajes,
acciones y poco mas.
Y en éste punto es cuando me planteé
que ya que este cacharro iba a funcionar como un puerto serie, pero
dedicado a formar una red... ¿No serÃa mejor hacer de él un puerto
serie standar RS-232C? y aparte un módulo adaptador a la red?
De ésta forma disponemos de una puerta que podemos usar para lo que
queramos, incluido todo el hardware que existente para PC, asi como
conectarlo a un PC diréctamente y para colmo es facilÃsimo de
programar desde cualquiera de los lenguajes que usemos, BASIC,
ensamblador...
Desde BASIC sólo hay que hacer "OUT 0,X" para activar el puerto serie
y luego "OUT 1,C" y ya está transmitido por el puerto serie el dato
que habÃa en C.
Asà mismo, tanto el módulo adaptador a la red, como el resto de
dispositivos que estoy diseñando para él, se le podrÃa conectar tanto
a un MSX como a un PC, un MAC, un PDA, etc...
Bueno, pues esta fase del proyecto está casi concluida con las
siguientes caracterÃsticas:
- Interface RS-232C con conector DB9M
- Comunicación hasta 57600 bps
- modos:
- con control de flujo de datos por hardware
(pines RTS,CTS,DTR,DSR,DCD,RI)
- sin control de flujo de datos, y en este modo se pueden
controlar por software los pines CTS,DSR,etc... si se desea.
- Lleva implementada una cola FIFO para los datos de entrada y otra
para los datos de salida de 128 Bytes cada una, para evitar tiempos
de espera y perdidas de datos. Esta cola es gestionada también
automáticamente por el cartucho para liberar al MSX de esa carga, con
la consecuente facilidad de programación y velocidad para nuestros
juegos.
- Totalmente configurable:
- Velocidades (desde 1200, 2400, 4800, 9600, 19200, 38400 y
57600 BPS)
- Formato (8 y 9 bits de datos), para poder implementar
por software la verificación de datos mediante bit de
paridad.
- Activa o desactiva puerto serie.
- Posibilidad de desactivar dichos buffers intermedios.
- Identificación del hardware, para que el software pueda
buscarlo antes de ejecutar nuestras aplicaciones.
- RESET del dispositivo.
- Se puede consultar el estado de los buffers de
transmisión y recepción (cuántos bytes contienen)
- Consulta de errores de desbordamiento de los buffers.
- Consulta del estado de los pines de control de flujo.
Todo esto se realiza mediante 2 registros de lectura y escritura, &h0
y &h1, de la siguiente manera.
&h0 - Este registro es usado para escribir comandos a ejecutar
por el cartucho, tales como:
- Activacion/desactivación del puerto serie.
- Identificación.
- Muestra estado del buffer de entrada (para saber si
hay algo que leer)
- etc... (todo lo expuesto en CARACTERISTICAS)
Si leemos de este registro, tendremos la información que hayamos
pedido al cartucho mediante los comandos.
&h1 - Registro para datos de entrada y salida.
Con "C=INP (&h1)" leemos el dato que ha entrado en el puerto
serie y lo guardamos en la variable C.
Con "OUT (&h1),C" escribimos el dato de la variable C en el
puerto serie.
Como podéis ver es sencillÃsimo de programar incluso desde BASIC,
simplemente activarlo "OUT &h0,X" y a leer y escribir en &h1.
La configuración por defecto es 9600 bps 8N1.
Para los más exigentes, escribiendo comandos en el registro &h0,
podéis cambiar la velocidad, etc...
He subido una imagen a hispamsx, donde se muestra el aspecto del prototipo por
ambas caras y ya montado en una carcasa de cartucho.
La imagen está en el siguiente enlace:
http://es.photos.groups.yahoo.com/group/hispamsx/vwp?.dir=/Hardware+nuevo&.dnm=Cartucho+DB-232C+multiplayer.jpg&.src=gr&.view=t&.hires=t
En cuanto haga algún software mostraré fotos para que lo veáis
funcionando en su salsa.
Me gustarÃa saber que os parece y si tenéis sugerencias o crÃticas,
también me vendrÃan muy bien.
Un saludo a todos.
-Daniel Berdugo-