Retomo este tema, aunque en realidad no hay novedades, mas bien es para ver si alguien tiene experiencia en asm de MSX y puede ayudar a darle forma a la rutina de transmision serie (RS232) por el puerto de joystick.
Yo parti de estas rutinas:
LINKPor lo que veo de la rutina que me quedo, use la 0.5 (aunque por ahi use una mezcla con la 1.0), que es esta:
LINKTambien hay rutinas de recepcion pero en este caso no las use para nada, algun dia seria bueno integrarlas para tener un paquete de rutinas para uso general.
Adjunto la rutina modificada tal como la use en el video a 19200 bps, no pego el codigo aca porque no sale bien formateado, tambien esta el .bin por si alguno quiere probarla con el circuito que puse antes, agregando un MAX232 para adaptar voltajes a RS232.
Como explique antes, uso una direccion del joystick para leer la señal CTS, y eso se verifica en la rutina justo antes de enviar cada byte de la cadena, si el receptor (en mi caso el PIC) esta ocupado, la rutina interrumpe el envio y retorna la cantidad de caracteres que quedaron sin enviar.
Yo ordene un poco el codigo, aunque gran parte es el codigo original con los comentarios en portugues, pero la rutina estaba hecha para leer una cadena de texto en el mismo codigo y transmitir eso sin ningun tipo de chequeo. Lo que agregue fue la lectura del parametro de la llamada USR, verifico si se envio una cadena de texto a la rutina, si no es asi se retorna 0, si es una cadena, se obtiene la direccion en memoria, la cantidad de caracteres, y se envia, chequeando en cada caracter la linea CTS. Si en algun momento se interrumpe la transmision, retorna la cantidad faltante como ya explique, si todo va bien retorna 0.
Lo ideal seria que se pudiera seleccionar de alguna manera si vamos a usar el puerto A o el B, y si vamos a usar o no la linea CTS, ademas de elegir la velocidad. Tal vez se podria agregar una segunda entrada en la rutina para configurar esos parametros, los que se escribirian a la propia rutina.
Pero la razon por la cual deje esto pendiente, fue que no pude decidir donde ubicar la rutina en memoria, en principio la pense para usarla desde el BASIC, y para que se cargue legalmente, no como ahora que esta ubicada en el medio de la zona de programa y de la zona de variables (por lo que si cualquiera de las dos crece se sobreescribe). El problema es que para ubicar la rutina hay que desplazar el comienzo del area de programa BASIC, o el final de la memoria del usuario, que esta en F380h, por este ultimo limite la cosa se complica porque ese tope solo es valido cuando no hay disketeras conectadas, y varia hacia abajo segun el tamaño y la cantidad de unidades, aparentemente es mas seguro reubicar el area de programa, que empieza en 8000h, pero esto solo es valido para maquinas con 64K, y cambia para maquinas con menor cantidad de RAM. Supongo que lo mejor seria asumir que sera una maquina de 64K, y en todo caso hacer versiones especiales si hace falta para otros modelos.
En fin, la rutina esta andando y ahi esta disponible el codigo, pero hay que decidir donde ubicarla en memoria y como configurar los parametros de transmision, que ahora estan fijos.
]serialtx.zip[/file]