Autor Tema: Carga de programas por RS232 en Commodore 64  (Leído 8726 veces)

pastbytes

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 557
  • SYS 0
    • Ver Perfil
Re:Carga de programas por RS232 en Commodore 64
« Respuesta #15 en: Abril 04, 2016, 03:48:54 »
Estamos mezclando las cosas, esto es RS232, solo se usa una linea para recibir, y uso 2 bits de stop, asi que son 11 bits por byte. Esto significa que recibiendo por el puerto del usuario usando 8 o 9 bits, segun como se implemente, se puede tener 11 veces mas velocidad. Pero eso implica que necesitas un puerto paralelo en la PC, algo que ya casi nadie tiene, un puerto RS232 se puede agregar por USB y funciona igual que uno "real", en cambio los puertos paralelos por USB solo estan diseñados para imprimir, no se que velocidad soportan y si se pueden usar con un protocolo no estandar.

pastbytes

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 557
  • SYS 0
    • Ver Perfil
Re:Carga de programas por RS232 en Commodore 64
« Respuesta #16 en: Abril 04, 2016, 04:02:55 »
En el puerto del usuario tenes 8 bits bidireccionales programables como entrada o salida de forma independiente, tambien hay una linea que se activa cuando lees o escribis el puerto, de esa manera el aparato externo sabe que hay un nuevo dato o que la C64 leyo el dato del puerto. Si queres hacer experimentos es el puerto ideal para eso. Los potenciometros van al SID y no estan hechos para hacer lecturas rapidas porque se basan en la carga y descarga de un capacitor, son suficientes para leer un joystick analogico o el mouse, me parece que una lectura tarda 512 microsegundos o algo asi. El mouse de Commodore envia una señal analogica proporcional a la diferencia de movimiento desde la ultima lectura, seria una señal para X y otra para Y, pero me parece que "emula" un potenciometro enviando una señal digital de cierta duracion, para engañar al SID como si realmente hubiera una resistencia descargando al capacitor.

Scooter

  • Commodorista
  • ***
  • Mensajes: 89
  • SYS 0
    • Ver Perfil
Re:Carga de programas por RS232 en Commodore 64
« Respuesta #17 en: Abril 04, 2016, 11:00:53 »
Hasta donde recuerdo, en el puerto de usuario básicamente hay un puerto serie y uno paralelo con niveles ttl.
No se si pueden funcionar los dos a la vez, de eso no me acuerdo.

Como el puerto serie está implementado en la CIA que no es una UART, el soporte en hardware es limitado y además creo que en el chip hay algún bug, de ahí la ridícula velocidad de la 1541, por eso o por lo que sea, el puerto serie está limitado a 9600bps que tampoco es una catástrofe, eso es más o menos 1kB por segundo que es más del doble que una 1541 estándar.
Hasta donde recuerdo desde el basic se puede usar con un open el número adecuado que no recuerdo y luego print# e input#
Para adaptar niveles se hace fácilmente con un MAX 232 o 233 o, como están los 9Vac en el puerto con un 1488 y un 1489 más un circuitillo que genere ±12V; es decir dos diodos y dos condensadores.
Hace un billón de años salió el circuito en la revista nueva electrónica.

El puerto del PC llega sin pegas a 115kbps, puede que a 230.

Dependiendo del programa como sea vale un adaptador USB serie o no. Yo tengo una tarjeta PCI serie + paralelo que es mucho más compatible.

Se puede implementar un puerto serie por software, por ejemplo en los pines del puerto de joystick pero habría que ver a qué velocidades llegamos. No mucho más de 9600 me imagino.

Enviado desde mi fnac 5.7 mediante Tapatalk
« última modificación: Abril 04, 2016, 11:05:41 por Scooter »

pastbytes

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 557
  • SYS 0
    • Ver Perfil
Re:Carga de programas por RS232 en Commodore 64
« Respuesta #18 en: Abril 04, 2016, 22:03:43 »
El puerto RS232 implementado por soft en la ROM (con soporte directo en el BASIC) no se puede usar de forma segura a mas de 1200 bps, a 9600 bps se puede llegar usando los conversores serie<>paralelo de las CIA, pero ya no seria compatible con el BASIC y con todo el soft de comunicaciones clasico, porque usa señales distintas en el puerto del usuario. El cable necesario para 9600 bps se llama UP9600.
Implementando RS232 por soft yo pude llegar a 57600 bps, lo mismo da si se usa el joystick o el puerto del usuario porque es todo manejado directamente con una rutina propia, en el video que esta al principio del hilo se puede ver que se recibe bien a esa velocidad, tarda alrededor de 8 segundos y medio en descargar el commando, que tiene poco mas de 46K. En la prueba utilice en el PC un adaptador USB<>RS232.

Scooter

  • Commodorista
  • ***
  • Mensajes: 89
  • SYS 0
    • Ver Perfil
Re:Carga de programas por RS232 en Commodore 64
« Respuesta #19 en: Abril 05, 2016, 08:37:55 »
Pues enhorabuena por el código. No es normal llegar a esas velocidades con una uart software.

Enviado desde mi fnac 5.7 mediante Tapatalk


pastbytes

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 557
  • SYS 0
    • Ver Perfil
Re:Carga de programas por RS232 en Commodore 64
« Respuesta #20 en: Abril 05, 2016, 09:21:02 »
Hay que tener en cuenta que las rutinas de la ROM no desactivan la pantalla y permiten enviar y recibir en teoria simultaneamente, por eso no se garantiza mas de 1200 bps. La rutina que hice desactiva la pantalla y las interrupciones, y no hace chequeos de paridad o siquiera de que el bit de stop sea correcto. Ademas el tiempo necesario para incrementar el puntero para ir almacenando el byte recibido en memoria toma el tiempo suficiente como para perderse el siguiente bit de start, por lo que tengo que usar 2 bits de stop, para dar tiempo a la rutina a recibir el siguiente byte. Lo bueno es que de esta manera no es necesario un programa especial en el PC, porque el C64 esta preparado para recibir los bytes sin tiempo intermedio entre ellos, a 57600 bps. Estos tiempos criticos hacen que tenga que eliminar todos los chequeos posibles, pero teniendo en cuenta que hoy usamos cables cortos y es dificil que haya ruidos en la comunicacion, la recepcion deberia hacerse sin problemas. Tal vez tendria que hacer una suma de comprobacion y mostrarla al final, para estar seguro de que se recibio todo correctamente. Lo ideal seria que se enviara en bloques de 1 o varios KB con un minimo chequeo de errores, y el C64 le indicara al PC que debe reenviar ese bloque, pero esto requeriria un programa especial en el PC.
Lo que me va a faltar probar es el funcionamiento en un C64 PAL, ya que tanto mi C64 como mi C128 son NTSC.
« última modificación: Abril 05, 2016, 09:23:32 por pastbytes »