HispaMSX

RE: "Mega-Multiplayer para MSX"

2004-06-14 21:02:37
Existiendo nestortecepeipé, el hecho que todavía no haya un 
multiplayer para internet es un sacrilegio.

--- En hispamsx(_en_)yahoogroups(_punto_)com, Yahoo <dberdugo1@y...> escribió:
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+nu
evo&.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-


<Anterior en la conversación] Conversación actual [Siguiente en la conversación>